正如我所理解的,通過使用wb模式保存C文件,我不應該在保存的文件(零和一)中看到二進制數字。保存爲C文件的二進制文件,但不顯示零和
當我保存白平衡模式的文件中的輸出是:
Feras威爾遜 - N的FFFFîè`P c^XHF˚F û¥2012
但這不是二進制零和一些。如何保存文件以包含零和一個,然後能夠在C中讀取它?
正如我所理解的,通過使用wb模式保存C文件,我不應該在保存的文件(零和一)中看到二進制數字。保存爲C文件的二進制文件,但不顯示零和
當我保存白平衡模式的文件中的輸出是:
Feras威爾遜 - N的FFFFîè`P c^XHF˚F û¥2012
但這不是二進制零和一些。如何保存文件以包含零和一個,然後能夠在C中讀取它?
它被保存爲0和1,但您的文本編輯器將它們作爲字節讀取(它將它們分成8位)並使用ASCII顯示它們。 [1]
當您寫入文本文件時,爲解釋您希望編寫的二進制數據做了大量工作,以便將其置於人們可讀的格式。
例如,如果你寫的數字255
,那就把它帶到形式'2'
,'5'
,'5'
(這是個字符!),然後寫這些的每個字符。
如果它寫入一個二進制文件,它只會在文件中放入實際的二進制數據。這取決於它是什麼類型的變量(有多少個八位字節表示它)以及endianess和其他東西。如果它是一個無符號字符,它將把二進制文件0b11111111
(這是實際的原始數字,而不是字符!)。
這只是你的編輯器或命令的文件的文本表示。內部所有文件在HDD/SDD/RAM/...上以0和1存儲 - 嘗試使用十六進制編輯器打開文件,如bless
(易於在Linux上使用,Windows需要Mono - 或者搜索另一個十六進制編輯器想要使用)來查看字節如何存儲。此外,我建議使用bless
,因爲如果提供不同格式的不同表示。
在您的代碼中,您可以使用read方法按字節存儲內容並解釋此內容。如果您一次讀取多個字節,請牢記可能的endianness問題。這就是Little和Big Endian系統以「反向」順序存儲和讀取字節。正在讀取的文字0x1337
可能被讀作0x3713
。只要熟悉這個術語並且使用維基百科來理解如何處理這個問題,如果有必要的話。
所有文件都存儲在二進制文件中!這只是一個連續的程序如何查看/解釋這個二進制文件的問題。取決於你如何使用這個文件,它會被讀取爲表示字符的字節序列,或者表示指令的字節序列,或者表示Unicode等的字。
如果你想看到你的文件不同格式,使用od
:
NAME
od - dump files in octal and other formats
這將轉儲文件以十六進制,字符,八進制等。(一件事也不會做的是告訴你在二進制,但是你可以得到你從八進制/十六進制輸出很輕鬆了)