2013-11-22 199 views
1

我在我的C++類中有這個奇怪的賦值,我必須在二進制文件(132.147)中使用浮點類型編寫一定的數字,然後使用char類型讀取它,最終結果將是每個字節的十進制值(-94,37,4和67)。以字節讀取二進制文件

fstream binFile("blah.bin", ios::binary|ios::in|ios::out); 
float a = 132.147; 
binFile.write((char*)&a, sizeof(float)); 
char b[4]; 
binFile.read((char*)&b, sizeof(b)); 
cout << (int)b[0] << ' ' << (int)b[1] << ' ' << (int)b[2] << ' ' << (int)b[3] << endl; // -51 -51 -51 -51 
cout << b[0] << ' ' << b[1] << ' ' << b[2] << ' ' << b[3]; // = = = = 
binFile.close(); 
return 0; 

我明白他們從哪裏得到這4個數字。如果我使用十六進制編輯器編寫文件並讀取它,我會得到4個十六進制數字,一旦轉換爲帶符號的二進制數字,就可以轉換爲它們的小數形式。但是,我完全不知道如何以編程方式在C++中執行此操作。任何線索?

謝謝!

+1

你幾乎在那裏。您關閉了文件,因此您必須重新打開它才能再次閱讀。你也想要讀取4個字節,而不是10(sizeof(b)== 10,因爲你將它設爲10個元素)。請注意,當您編寫一個浮點數時,請使用'sizeof(float)'而不是'sizeof(int)' – Adam

回答

1

亞當說你必須重新打開文件。如果您檢查了讀取的返回值,您可能已經注意到它沒有讀取。你只需要閱讀sizoef一個字節,但要求閱讀更多是無害的。當你閱讀b ...

cout << (int)b[0] << ' ' << ... 
+0

感謝您的回覆,Adam和Tony。我在您的建議中編輯了我最初問題中的一段代碼。我這次實際運行它並投入到輸出中。我仍然不明白 - 無論是在編碼和理解實際發生的事情方面。什麼應該代表我在這裏讀的前4個字符?謝謝 ! – user3020233

+0

我很笨。我現在明白了。謝謝一堆! – user3020233