C ++使用" putchar"在二进制中输出一个单词

时间:2014-10-10 15:35:08

标签: c++ binary bit-manipulation

我的功能:

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表示。

出了什么问题?

2 个答案:

答案 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::putstd::ostream::write

另外,请注意putchar函数将其参数写入控制台并在成功时返回参数。
explanation of putchar.