2011-11-26 158 views
4

出於某種原因,這種代碼不工作,我期望寫入二進制到std :: fstream的:使用<<操作

std::fstream theFile; 
theFile.open(<someFilename>, std::ios::beg |std::ios::out|std::ios::binary|std::ios::trunc); 
theFile << 1;   //1 is being written as a string 
int var= 25; 

theFile << 25;  //same thing, 25 is written as a string 

可能是什麼問題呢?我使用Visual Studio 2010附帶的Microsoft C++編譯器。

回答

6

<<運算符的全部用途是將格式化數據寫入流。如果你想寫二進制數據,你應該使用ostream::write()ostream::put()

0

您需要先將值的類型轉換爲char,否則iostream庫會將值視爲int並將它們格式化爲可讀的字符串。

theFile << (char)1 << (char)25; 
+0

如果數值大於127或小於-128,那麼效果不會很好...... – sehe

+0

@sehe,是的。該文件不會關心簽名與未簽名。它將被寫入未簽名的文件。我鼓勵你嘗試一下,親自看看。我剛剛做了,它工作得很好。你可以寫0到255之間的任何東西。 –

+0

哦,我的錯誤。我一定被我的編譯器允許的整數超過255的巧合所矇蔽了。消極的整數,因爲大聲哭泣。 – sehe