将整数写入fstream时,C ++ Last Number仅为2bytes而不是4

时间:2014-06-18 16:06:51

标签: c++ byte fstream ostream

我尝试使用ostream将32位整数写入文件。我正在使用<<操作者:

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

它的效果很好,除了最后一个数字(在我的情况下11328,二进制为40 2C 00 00),但只有40 2C被写入文件。

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

我做错了什么?

2 个答案:

答案 0 :(得分:4)

您正在使用operator<<(ostream&, const char *)重载来明显 C风格的以空字符结尾的字符串,这会导致未定义的行为。 1 < / p>

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

如果需要二进制I / O,请使用ostream::write()<<用于格式化的 I / O.


1)更准确地说,只要整数的最后一个字节不为零,你就处于未定义行为的状态 - 即,每当打印出你要打印的所有4个字节时。

答案 1 :(得分:0)

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

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