2017-05-15 61 views
0

我想將一些信息保存爲文本文件(.txt格式)。爲了減小文件大小,我使用16位二進制數的每一位來表示一些信息。例如,對於一個16位二進制數0000 0001 1000 1111,每一位都有其特定的含義。由於任何ASCII字符等於8位二進制數,所以我想我的16位數字轉換爲兩個字符並將其保存:是否可以將16位二進制數轉換爲兩個字符並將其保存爲文本文件?

uint16_t a; 
a = 13 << 10 | 1 << 3 | 2;// a is a 16bit binary number 
char b, c; 
b = (char)(a>>8); 
c = (char)a;// convert a to two characters 

然後,我將節省B和C到一個文本文件。當我稍後閱讀文本文件時,我會將這兩個字符轉換爲16位二進制數並獲取信息。問題是我知道一些ASCII字符不可打印,所以我想知道是否有任何問題?任何答案將不勝感激!

+0

當您嘗試打印時,非打印字符只是一個問題。或者通過一些只能處理可打印字符的系統來運行文件。只要每個人都把文件視爲二進制數據(你不應該真的叫這個ASCII - 它只有7位),一切都很好。 – Thilo

+0

感謝您的回答!我將把這些字符保存到一個txt文件中,然後我會使用一個軟件壓縮它,例如winzip。我不確定是否有可能做到這一點。 – LiuGui

+0

我認爲如果你把這個二進制文件稱爲一個二進制文件,並給它一個不同的擴展名,比如說「.bin」,它會避免很多混淆。有沒有理由不能? –

回答

1

這不應該是一個問題。文件是文本還是二進制文件,或者只是一個約定。這完全取決於程序如何解釋數據。即使數據是「文本」,當您打開UTF-32編碼的文本文件時,非Unicode的文本編輯器也會顯示亂碼。與您的程序類似。你可以用.jpg命名文件,只要你的程序知道如何處理它,它應該沒問題。

只要確保以二進制模式讀寫。一些編程語言爲「文本模式」做了少量的處理,例如用平臺的換行符替換換行符。

+0

感謝您的回答!另一個問題是,如果我將該字符保存爲.txt文件,那麼我將使用一個軟件(例如winzip)來壓縮它。當我讀取文件時,我會先解壓它,然後將字符轉換爲16位二進制數。我認爲可以這樣做? – LiuGui

+0

你剛纔描述瞭如何做到這一點,所以它絕對有可能:)。要考慮的一件事是通過winzip對文本文件進行特殊處理。它應該足夠聰明,不要只看擴展名,但如果你發現任何設置來禁用它,這將是偉大的。 –

相關問題