C++ 使用 "putchar" 输出二进制单词

C++ Using "putchar" to output a word in Binary

本文关键字:二进制 单词 输出 putchar 使用 C++      更新时间:2023-10-16

我的函数:

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时,二进制.bin的二进制表示形式为00110000 00110000 0011000000110001。

应该是000000000000000000000001。(注意:一个字是32位)

00110000 00110000 0011000000110001是0001(30 30 31)的ascii表示。

出了什么问题?

问题是operator<<。流插入运算符用于将其输入转换为文本格式,并将格式化后的文本传递给流。

  file << putchar((word >> 24) & 0xff);
       ^^----> this is the problem.

您需要使用不执行翻译的流方法,例如std::ostream::putstd::ostream::write

此外,请注意putchar函数将其参数写入控制台,如果成功,则返回参数
请参阅putchar的说明。

您的错误是试图使用文本模式函数以二进制编写。您应该使用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()。它只打印到控制台,而不是文件。