我的功能:
void output(int word)
{
file << putchar((word >> 24) & 0xff);
file << putchar((word >> 16) & 0xff);
file << putchar((word >> 8) & 0xff);
file << putchar(word & 0xff);
}
其中“file”使用fstream将putchar中的二进制文件输出到名为“binary.bin”的文件中。 当“word”为1时,binary.bin的二进制表示为00110000 00110000 00110000 00110001。
它应该是00000000 00000000 00000000 00000001.(注意:一个字是32位)
00110000 00110000 00110000 00110001是0001(30 30 30 31)的ascii表示。
出了什么问题?
答案 0 :(得分:1)
您的错误是尝试使用文本模式函数来写入二进制文件。您应该使用file::put(char)
代替。像那样:
void output(int word)
{
file.put(word >> 24);
file.put(word >> 16);
file.put(word >> 8);
file.put(word);
}
由于file.put
仅需char
,因此您不需要和0xff的结果,所以我将其删除了。
另外,我不明白你为什么要使用putchar()
。它只打印到控制台,而不打印到文件。
答案 1 :(得分:1)
问题是operator<<
。流插入运算符旨在将其输入转换为文本格式,并将格式化文本传递给流。
file << putchar((word >> 24) & 0xff);
^^----> this is the problem.
您需要使用不执行翻译的流方法,例如std::ostream::put
或std::ostream::write
。
另外,请注意putchar
函数将其参数写入控制台并在成功时返回参数。
见explanation of putchar.