我查了一下glib-2.64.4的源代碼,所有UTF-8相關函式,采用的資料型別是gchar(注:typedef char gchar)。
若僅僅處理英文字符,那么UTF-8完全兼容ASCII,用char自然無可厚非;可問題是,中日韓等UTF-8字符用到了最高符號位,再用char處理,似乎很容易一不小心因符號位擴展,而隱藏了巨大的陷阱?
請教:為什么他們不直接用unsigned char處理UTF-8?僅僅因為偷懶,char容易使用?
uj5u.com熱心網友回復:
我感覺啊。可能是因為少打一個unsigned的原因。uj5u.com熱心網友回復:
字符你認為拿來進行數字計算的可能性會多大?即便遇到了需要對字符編碼進行數字運算。能這么做的估摸也對字符有一定的認識,會漏下這個?
unsigned 的意義完全就屬于數學運算上的意義。
如果對字符確實有數學運算這方面的需求,可以根據具體運算情況進行選擇是否unsigned。
uj5u.com熱心網友回復:
要看具體的處理代碼,char的符號位有用也僅是在當作短整數使用的情況uj5u.com熱心網友回復:
搞編碼的,搞記憶體處理哪方面的人而言,{int、 unsigned int},{char*,void*,...*},{int8,char, unsigned char}這些 真區別不大uj5u.com熱心網友回復:
樓上說得對,它的意義僅僅在於“開闢一塊記憶體區”uj5u.com熱心網友回復:
若考慮到字符加密,需進行位元組邏輯運算:^&|~的話,估計就不會輕下這個結論了。
uj5u.com熱心網友回復:
只有右移對有符號數、無符號數有不同操作,其他都沒影響uj5u.com熱心網友回復:
因為涉及位元組運算,我經常會遭遇符號位擴展方面的困擾,搞得簡直都有些抑郁了!不得不條件反射地、歇斯底里地、不停地:
x & 0xFF;
似乎只要一不留神,就會被符號位給坑害啦!呵呵。
uj5u.com熱心網友回復:
位運算不需要考慮符號位,一樣處理uj5u.com熱心網友回復:
字符集編碼現在也沒有搞清楚uj5u.com熱心網友回復:
在C語言里,char型別可能等同于signed char,也可能等同于unsigned char,可以在編譯時指定char型別到底等同于哪一個。要不,你問問Linux在編譯時是怎么指定的?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17556.html
標籤:C語言
