4

*ptr 型のポインタがありますuint8_t。これは、約 32 バイトのバイナリ データを指しています。ポインターが指しているコンテンツを C++ のファイルに出力したいと思います。私はバイナリモードで行きます。すなわち

ofstream fp;
fp.open("somefile.bin",ios::out | ios :: binary );
//fp.write( here is the problem )
fp.write((char*)ptr,sizeof(ptr));

ptr が指している内容を印刷する方法はありますか? 先ほど示した方法では、32 バイトのデータを指している間にファイルに 8 バイトのデータを取得するためです。

4

2 に答える 2

12

コンピューターのポインターが 64 ビットであるため、8 バイトを取得します。したがって、sizeof(ptr)8 を返します。配列のサイズではなく、ポインターのサイズを取得します。たとえば、次のように、ポインターと一緒に書き込むデータのサイズを渡す必要があります。

uint8_t data[32];
// fill in the data...
write_to_file(data, sizeof(data));

void write_to_file(uint8_t *ptr, size_t len) {
    ofstream fp;
    fp.open("somefile.bin",ios::out | ios :: binary );
    fp.write((char*)ptr, len);
}
于 2012-08-01T18:17:22.160 に答える
0
double pi = 3.1415926535; // IEEE 8 bytes
uint8_t bytes[8] = { 0 };
double* dp = (double*)(&bytes[0]); //force dp to point to bytes
*dp = pi; // copies pi into bytes
file.write((char*)dp,sizeof(bytes));
于 2012-08-01T19:24:00.730 に答える