我有一個關於保存C字符數組中的字符的問題。C字符超過128
我必須從文件中讀取文本到「char」類型的數組中(我不能使用unsigned char)。當某些字符的值超過127(例如€,ä,ö,...)時,它們會將它們保存爲負值,但它們通常需要更多空間(例如€需要3個負值)。
如何計算這些負值回無符號的字符。有人可以將我鏈接到關於該問題的教程或指南嗎?
我有一個關於保存C字符數組中的字符的問題。C字符超過128
我必須從文件中讀取文本到「char」類型的數組中(我不能使用unsigned char)。當某些字符的值超過127(例如€,ä,ö,...)時,它們會將它們保存爲負值,但它們通常需要更多空間(例如€需要3個負值)。
如何計算這些負值回無符號的字符。有人可以將我鏈接到關於該問題的教程或指南嗎?
char x = 128;
unsigned char y = (unsigned char) x;
printf("%c %u\n", x, y);
這取決於編碼使用。
傳統的1字節編碼沒有問題。是的,有些角色被視爲負值,但他們仍然是那些閱讀時的角色。如果你把它們寫回原樣,它們就會成爲它們。
由於您確定每個歐元符號有3個char
s,因此您正在處理一些Unicode編碼,如UTF-8。
這意味着,您應該將它們存儲在一些多字節類型中,如wchar_t
。但這與您在char
中存儲數據的要求相矛盾。
我建議你先將文件轉換爲1字節編碼,例如Win1252。該編碼對歐元符號有1個字節。
如果你想使用Unicode,恐怕很難處理負面的char
。用正整數表示Unicode值是傳統的。
如果像'€'這樣的單個字符需要三個'char',那麼您可能正在讀取一個[UTF-8](http://en.wikipedia.org/wiki/UTF-8)編碼文件。 –