当向fstream写入整数时,c++ Last Number仅为2字节而不是4字节

C++ Last Number is only 2bytes instead of 4 when writing integer to fstream

本文关键字:字节 仅为 4字节 Number Last fstream 整数 c++ 当向      更新时间:2023-10-16

我尝试使用ostream写入32位整数到文件。我用<<接线员:

ostream file;
map<unsigned char, int32_t> histogram;
//… 
file << reinterpret_cast<char*>(&histogram[i]);  

除了最后一个数字(在我的例子中是11328,即二进制中的40 2C 00 00)之外,它工作得很好,但是只有40 2C被写入文件。

它是相同的数字,但是当我要再次导入文件时,我想假设每个数字都以32位编码。

我做错了什么?

您正在使用operator<<(ostream&, const char *)过载的东西显然是不是一个c风格的空终止字符串,这导致未定义的行为1

40 2C 00 00的情况下,该函数将零字节解释为空终止符,因此它只打印前两个字节。

当您需要二进制I/O时,使用ostream::write()<<用于格式化的 I/o。


1)更准确地说,当整数的最后一个字节不为零时,您就处于未定义行为区-即,无论何时打印出您想要打印的所有4个字节。

当你使用file << reinterpret_cast<char*>(&histogram[i]);时,事实上,它认为你想输出一个C风格的字符串。因此当遇到''时,它将停止输出。所以你的结果是402c。

您可以在stdio.h中尝试fwrite()函数