2014-10-10 44 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()。它僅打印到控制檯,而不是文件。