我正在使用fstream寫入二進制文件,並使用二進制標誌打開文件時。寫入二進制數據
我需要寫一些文本爲二進制文件,這是一個簡單的寫法訣竅。 問題是我還需要編寫(如十六進制所示)0.在二進制記事本中打開時的值顯示爲零,但試圖寫入時該值不爲零,它的值爲十六進制值30。
如何編寫這樣的特定數據?
我正在使用fstream寫入二進制文件,並使用二進制標誌打開文件時。寫入二進制數據
我需要寫一些文本爲二進制文件,這是一個簡單的寫法訣竅。 問題是我還需要編寫(如十六進制所示)0.在二進制記事本中打開時的值顯示爲零,但試圖寫入時該值不爲零,它的值爲十六進制值30。
如何編寫這樣的特定數據?
當您打開fstream時,使用ios::binary
標誌來指定二進制輸出。更多的信息可以在here找到。
至於寫0,當你在十六進制看到30你正在寫的字符「0」,而不是二進制數字0。要做到這一點與fstream的你可以這樣做:
my_fstream << 0;
請記住二進制數據0沒有文字表示,所以您將無法在記事本中讀取它,就像您可以讀取字符'0'一樣。
你可能只需要這樣的事情,提高您認爲合適的:
ofstream file("output.bin", ios::out | ios::binary);
if (file.good())
{
char buf[1] = {0};
file.write(buf, sizeof(buf));
file.close();
}
鏈接到更先進的解決方案和文件已經發布。
謝謝你做到了。 請你解釋一下寫作之間的區別 char c =「0」; 和 char c = {0}; ? – 2009-09-10 07:30:32
NP。當你寫一個「0」時,你正在寫一個零字符的_string_,其值等於它的ASCII代碼0x30h,這就是爲什麼當在記事本中打開時,你在十六進制查看器中將它看作一個零字符和0x30 。 {0}基本上等於用零填充一個數組,而你不再寫0x30h,而是寫一個真正的0x00h。你可以在這裏找到差異的很好的解釋:http://www.cplusplus.com/doc/tutorial/arrays/和這裏:http://www.cplusplus.com/doc/tutorial/ntcs/ – Dmitry 2009-09-10 17:11:38
發佈一些代碼,如果你願意,所以我們可以更好地瞭解你在做什麼。 – 2009-09-09 17:36:51
你用寫或<<? – anno 2009-09-09 17:48:14
序列化是這個的常用術語。 – DanM 2009-09-09 17:53:57