2

我试图将 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");}`

接下来,我将尝试写入的数据(在本例中为 uint32_t“数据”)打印出来,并将其写入文件流的末尾。

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

最后我追加数据

hartOutStream<<data;

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

我怀疑问题出在 << 运算符中,它将其类型转换为 ascii。我已经尝试过类型转换, atoi() 函数,但似乎没有任何效果。有谁知道这有什么问题?

谢谢

4

2 回答 2

8
ofstream f;
f.open("my.bin",std::ofstream::binary);
uint32_t data=0x00000100;
f.write((char*)&data,sizeof(data));
于 2014-04-03T16:16:38.953 回答
1

<<运算符格式化为文本。如果您想要二进制格式,则必须手动格式化为std::vector<char>,然后使用std::ostream::write(). 就像是:

std::vector<char> buf;
buf.push_back( (data >> 24) & 0xFF );
buf.push_back( (data >> 16) & 0xFF );
buf.push_back( (data >>  8) & 0xFF );
buf.push_back( (data      ) & 0xFF );
hartOutStream.write( buf.data(), buf.size() );

(如果您使用的是较旧的 C++,则可能需要编写 &buf[0],而不是buf.data()。)

于 2014-04-03T16:11:18.433 回答