2013-05-15 45 views
0

我不確定發生了什麼,但是我正在使用ofstream對象以二進制模式寫入文件。爲什麼我正在編寫打印亂碼的文件?

我寫一個字節到一個文件,但該文件被打印亂碼。它的打印這種類型的廢話:ôß

我有一個名爲ByteOutput了一個名爲inByte功能類中定義爲這樣:

void inByte(int byte) 
{ 
    ostreamObj.write(&buffer, byte & 255); 
} 

&buffer是我使用的存儲字節一點緩衝的引用數據

在我的主,我定義了一個ofstream的OBJ和使用打開的文件的二進制:

obj.open("tester", std::ios::binary); 

我寫一個字節的數據,使用使用ByteOutput對象的文件:

writeObj.inByte(1001011); 

然而,當我檢查的文件,它是所有的象形文字。它不顯示字母K,其二進制演示1001011.

我在做什麼錯?

+5

'INT A = 1001011'。 「a」的價值是什麼?它是'1001011'而不是'75'。 – gongzhitaao

+0

您應該傳遞寫入函數的字符數,而不是'byte&255'。 – chris

+0

@克里斯,該指令規定我必須寫「最」顯著字節到ostream的,這就是爲什麼我'字節和255' – Pangu

回答

1

如果你想使用的二進制,考慮hexstd::bitset

#include <bitset> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    int a = 0x4B; // 01001011 
    bitset<8> bs(a); 
    cout << hex << a << endl; 
    cout << bs << endl; 
} 

如果輸出std::bitset到一個文件中,每個比特將被表示爲一個char,即,你會看到01001011在你的文件。

+0

實際上,從二進制到十六進制的'01001011'是'0x4B' – leemes

+0

@leemes謝謝。我的錯。 – gongzhitaao

2

writeObj.inByte(1001011); 

一個整數= 1001001小數調用函數,而不是二進制的。

+0

頭文件包含'inByte'方法的'int'類型的參數。如何測試以確保該方法確實將一個字節的數據寫入文件? – Pangu

+0

傳遞一個字節給它,而不是一個int ...分別考慮數字和它們的(書寫)表示。 1001011是一個十進制表示(它只包含0,1不會改變這個事實)。 – leemes

+0

@leemes,我從它的二進制表示中理解了一個數字,但我不理解要將什麼傳入寫入函數的參數來向文件中寫入一個字節 – Pangu

相關問題