4

我有一个uint8_t*ptr 类型的指针,它指向大约 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 指向的内容,因为我刚刚展示的方式是,我在文件中获得 8 个字节的数据,而它指向 32 个字节的数据。

4

2 回答 2

12

你得到 8 个字节,因为你计算机上的指针是 64 位的。因此,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 回答