2012-09-18 38 views
1

正如我所理解的,通過使用wb模式保存C文件,我不應該在保存的文件(零和一)中看到二進制數字。保存爲C文件的二進制文件,但不顯示零和

當我保存白平衡模式的文件中的輸出是:

Feras威爾遜 - N的FFFFîè`P c^XHF˚F û¥2012

但這不是二進制零和一些。如何保存文件以包含零和一個,然後能夠在C中讀取它?

回答

7

它被保存爲0和1,但您的文本編輯器將它們作爲字節讀取(它將它們分成8位)並使用ASCII顯示它們。 [1]

當您寫入文本文件時,爲解釋您希望編寫的二進制數據做了大量工作,以便將其置於人們可讀的格式。

例如,如果你寫的數字255,那就把它帶到形式'2''5''5'(這是個字符!),然後寫這些的每個字符。

如果它寫入一個二進制文件,它只會在文件中放入實際的二進制數據。這取決於它是什麼類型的變量(有多少個八位字節表示它)以及endianess和其他東西。如果它是一個無符號字符,它將把二進制文件0b11111111(這是實際的原始數字,而不是字符!)。

[1] http://www.asciitable.com/

5

這只是你的編輯器或命令的文件的文本表示。內部所有文件在HDD/SDD/RAM/...上以0和1存儲 - 嘗試使用十六進制編輯器打開文件,如bless(易於在Linux上使用,Windows需要Mono - 或者搜索另一個十六進制編輯器想要使用)來查看字節如何存儲。此外,我建議使用bless,因爲如果提供不同格式的不同表示。

在您的代碼中,您可以使用read方法按字節存儲內容並解釋此內容。如果您一次讀取多個字節,請牢記可能的endianness問題。這就是Little和Big Endian系統以「反向」順序存儲和讀取字節。正在讀取的文字0x1337可能被讀作0x3713。只要熟悉這個術語並且使用維基百科來理解如何處理這個問題,如果有必要的話。

3

所有文件都存儲在二進制文件中!這只是一個連續的程序如何查看/解釋這個二進制文件的問題。取決於你如何使用這個文件,它會被讀取爲表示字符的字節序列,或者表示指令的字節序列,或者表示Unicode等的字。

如果你想看到你的文件不同格式,使用od

NAME

od - dump files in octal and other formats 

這將轉儲文件以十六進制,字符,八進制等。(一件事也不會做的是告訴你在二進制,但是你可以得到你從八進制/十六進制輸出很輕鬆了)