2014-10-10 46 views
0

使用“的putchar”输出一个字我的功能:C++中的二进制

void output(int word) 
{ 
     file << putchar((word >> 24) & 0xff); 
     file << putchar((word >> 16) & 0xff); 
     file << putchar((word >> 8) & 0xff); 
     file << putchar(word & 0xff); 
} 

其中,“文件”使用fstream的输出二进制从的putchar到一个名为“binary.bin”文件。 当 “字” 是1,则binary.bin的二进制表示是00110000 00110000 00110000 00110001.

它应该已经是00000000 00000000 00000000 00000001(注:一个字是32位)

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

出了什么问题?

+0

尝试使用'unsigned int word'代替并告诉我你得到了什么。 – 2014-10-10 15:38:28

+0

二进制输出保持不变。 – NoName 2014-10-10 15:41:39

+0

你如何打开文件进行书写? – 2014-10-10 15:42:56

回答

1

问题是operator<<。流插入操作符被设计为将其输入转换为文本格式并将格式化的文本传递给流。

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

您需要使用不进行翻译,如std::ostream::putstd::ostream::write流方法。

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

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()。它仅打印到控制台,而不是文件。