将uint8_t类型写入C++文件

6

我有一个类型为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个字节的数据。


你认为 fp.write((char*)ptr, 32); 有什么问题? - jahhaj
2个回答

12

因为你的计算机上的指针是64位,所以你得到了8个字节。因此, sizeof(ptr)返回8 -- 你得到的是指针的大小,而不是数组的大小。你应该传递要写入的数据的大小和指针一起,例如像这样:

<code>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);
}
</code>

1
在处理二进制数据时,streambuf/filebuf 比面向格式的 ostream/ofstream 更加方便。 - DanielKO

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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接