在C++中使用ofstream将32位二进制数据写入文件

Wil*_*ult 1 c++ rhapsody

我试图只写uint32_t数据到.bin文件.我首先打开一个文件流,我声明它是一个二进制文件流.

  `hartInStream.open (hartFileToWrite.c_str(), std::ifstream::binary);
   if(!hartOutStream.is_open())
        {
        printf("Something in outstream went wrong.\n");  
        }
   else 
        {
        printf("Yippy! it outstream worked!\n");  
        printf("---------Starting to read-------------\n");}`
Run Code Online (Sandbox Code Playgroud)

接下来,我将我尝试编写的数据(在本例中为uint32_t"data")打印出来,然后将其写入文件流的末尾.

printf(" Reading %lu from HART at %d-%d-%d\n", data, (int)addr1, (int)addr2, (int)addr3 );
Run Code Online (Sandbox Code Playgroud)

最后,我追加数据

hartOutStream<<data;
Run Code Online (Sandbox Code Playgroud)

我知道我应该写0x00 0x00 0x01 0x00(256)作为前4个字节,但我写的是32 35 36,这是ascii章程的十六进制等效为256.(使用HxD文件查看器)

我怀疑问题出现在<<运算符中,它将其强制转换为ascii.我尝试过类型转换,atoi()函数但似乎没什么用.有谁知道这有什么问题吗?

谢谢

Beo*_*ulf 5

ofstream f;
f.open("my.bin",std::ofstream::binary);
uint32_t data=0x00000100;
f.write((char*)&data,sizeof(data));
Run Code Online (Sandbox Code Playgroud)

  • 这有效,但它取决于系统的字节序.可能或可能不重要. (2认同)