2009-09-09 230 views
1

我正在使用fstream寫入二進制文件,並使用二進制標誌打開文件時。寫入二進制數據

我需要寫一些文本爲二進制文件,這是一個簡單的寫法訣竅。 問題是我還需要編寫(如十六進制所示)0.在二進制記事本中打開時的值顯示爲零,但試圖寫入時該值不爲零,它的值爲十六進制值30。

如何編寫這樣的特定數據?

+0

發佈一些代碼,如果你願意,所以我們可以更好地瞭解你在做什麼。 – 2009-09-09 17:36:51

+0

你用寫或<<? – anno 2009-09-09 17:48:14

+0

序列化是這個的常用術語。 – DanM 2009-09-09 17:53:57

回答

1

當您打開fstream時,使用ios::binary標誌來指定二進制輸出。更多的信息可以在here找到。

至於寫0,當你在十六進制看到30你正在寫的字符「0」,而不是二進制數字0。要做到這一點與fstream的你可以這樣做:

my_fstream << 0; 

請記住二進制數據0沒有文字表示,所以您將無法在記事本中讀取它,就像您可以讀取字符'0'一樣。

+0

他已經這麼做了。 – 2009-09-09 17:35:54

+0

是的,文字不好,但鏈接很好。 – gimpf 2009-09-09 17:39:19

+1

您可能的意思是:my_fstream <<'\ 0'; – sbk 2009-09-09 18:58:35

3

你可能只需要這樣的事情,提高您認爲合適的:

ofstream file("output.bin", ios::out | ios::binary); 
if (file.good()) 
{ 
    char buf[1] = {0}; 
    file.write(buf, sizeof(buf)); 
    file.close(); 
} 

鏈接到更先進的解決方案和文件已經發布。

+0

謝謝你做到了。 請你解釋一下寫作之間的區別 char c =「0」; 和 char c = {0}; ? – 2009-09-10 07:30:32

+0

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