C++ を使用してファイルを開こうとしています。ファイルは任意のタイプにすることができます。私がやろうとしているのは、メモリに保存されているファイルを開くことです。
それが1バイトのテキストファイルで、メモリに10000011として保存されていると仮定すると、C++を使用して、コンピューターに保存されているように、この形式でファイルを開きたいとします。
その方法は?
C++ を使用してファイルを開こうとしています。ファイルは任意のタイプにすることができます。私がやろうとしているのは、メモリに保存されているファイルを開くことです。
それが1バイトのテキストファイルで、メモリに10000011として保存されていると仮定すると、C++を使用して、コンピューターに保存されているように、この形式でファイルを開きたいとします。
その方法は?
次のような fopen 関数を呼び出すことで、ファイルをバイナリ形式で開くことができます。
FILE* f = fopen(filename, "rb");
ファイルをビットごとに読み取ることはできませんが、少なくともバイトごとに読み取る必要があります (バイトは作業する必要がある最小単位であるため)。たとえば、次のようになります。
unsigned char value;
fread(&value, 1, 1, sizeof(unsigned char));
ファイルの 1 バイトを読み取ります。次に、バイナリと演算 (&) で単一ビットにアクセスできます。この値をバイナリ (0 と 1 など) として出力するには、次のようにします。
printf("%d%d%d%d%d%d%d%d\n",
value & 0x80 ? 1 : 0,
value & 0x40 ? 1 : 0,
value & 0x20 ? 1 : 0,
value & 0x10 ? 1 : 0,
value & 0x8 ? 1 : 0,
value & 0x4 ? 1 : 0,
value & 0x2 ? 1 : 0,
value & 0x1 ? 1 : 0);
もちろん、これらは C 標準関数です。C++ 関数も使用できます。
ifstream file (filename, ios::in|ios::binary);
読むには、次を使用できます。
file.read(valueAddress, sizeInBytes);
また、(cout を使用して) 出力する方法を知っている必要があります。