QT之QChar
QChar 類是 Qt 中用於表示一個字符的類,實現在 QtCore 共享庫中。QChar 類內部用2個字節的Unicode編碼來表示一個字符。
一、編碼
//char類型是c/c++中內置的類型,描述了1個字節的內存信息的解析。
char gemfield=’g’; //gemfield標記的這塊內存的大小就是1個字節,信息就是01100111,8位。
char gemfield=’漢’;
//gemfield標記的這塊內存的大小依然是1個字節,存儲的信息是:0xBA,
//這是因為在windows系統中,漢字是以gbk編碼(ANSI)存儲的,“漢”這個字的編碼是0xBABA,因為char只有1個字節,所以就把低字節存儲過來。
//經過gemfield上面的介紹后,你已經理解了char這個內置類型的用法,也就理解了下面語句的輸出了:
char gemfield=0×40;
printf(“gemfield’s value is %c”,gemfield);
- QChar是Qt處理字符的基本類型,是對unicode字符的封裝。QChar使用2個字節的內存,在其內部維護了一個unsigned short 類型的內存(大多數的編譯工具也會把它當作unsigned short類型)。使用的是ucs-2標准。
- QChar封裝一個char類型是相當容易理解的,char類型作為QChar的構造參數時,會被轉換為unsigned short,繼而可被QChar接管。
- QChar封裝一個unsigned short類型也是容易理解的,比如:
//依據Qt內部使用的unicode表和codec插件,gemfield就可以被成功解析為“漢”這個字。
QChar gemfield=0x6C49; //0x6C49是“漢”字的unicode編碼
//下面這種情況是QChar不能處理的:
QChar gemfield = ‘漢’; //windows上“漢”的編碼是gbk編碼,值為0xBABA,正如gemfield上文提到的那樣。
// QChar維護的unsigned short內存上的信息是0xBABA,這個值並不是unicode編碼(unicode編碼值是gemfield上文中提到的0x6C49),所以解析不了。同理,QChar可以通過unicode()函數返回一個字符的unicode編碼。
二、Qchar接口
2.1、Qchar構造函數
//QChar 類提供了多個不同原型的構造函數以方便使用
QChar(); // 構造一個空字符,即'\0'
QChar(char ch); // 由字符數據ch構造
QChar(uchar ch); // 由無符號字符數據ch構造
QChar(ushort code); // 由無符號短整形數據code構造,code是Unicode編碼
QChar(short code); //由 短整形數據code構造,code是Unicode編碼
QChar(uint code); // 由無符號整型數據code構造,code是Unicode編碼
QChar(int code); // 由整型數據code構造,code是Unicode編碼
2.2、Qchar字符判斷
//QChar 類提供了很多成員函數,可以對字符的類型進行判斷,如:
bool isDigit() const; // 判斷是否是十進制數字('0' - '9')
bool isLetter() const; // 判斷是否是字母
bool isNumber() const; // 判斷是否是數字,包括正負號、小數點等
bool isLetterOrNumber(); // 判斷是否是字母或數字
bool isLower() const; // 判斷是否是小寫字母
bool isUpper() const; // 判斷是否是大寫字母
bool isNull() const; // 判斷是否是空子符'\0'
bool isPrint() const; // 判斷是否是可打印字符
bool isSpace() const; // 判斷是否是分隔符,包括空格等
2.3、Qchar數據轉換
//QChar 類提供了一些成員函數進行數據的轉換,如:
char toAscii() const; // 得到字符的ASCII碼
QChar toLower() const; // 轉換成小寫字母
QChar toUpper() const; // 轉換成大寫字母
ushort unicode() const; // 得到Unicode編碼
//注意這幾個函數都不會改變對象自身,轉換的結果通過返回值反映出來。
2.3、Qchar字符比較
//Qt 中定義了一些與 QChar 類相關的比較操作符, 如:
bool operator != (QChar c1, QChar c2); // 判斷 c1 是否不等於 c2
bool operator < (QChar c1, QChar c2); // 判斷 c1 是否小於 c2
bool operator <= (QChar c1, QChar c2); // 判斷 c1 是否小於等於 c2
bool operator == (QChar c1, QChar c2); // 判斷 c1是否等於c2
bool operator > (QChar c1, QChar c2); // 判斷 c1 是否大於 c2
bool operator >= (QChar c1, QChar c2); // 判斷 c1是否大於等於 c2
2.3、Qchar與Char類型轉化
//qchar - char
// char Qchar::toLatin1() 或者 char Qchar::toAscii() const
char ch;
qchar qch;
ch = qch.toLatin1;
//char -> qchar
qchar(char ch)
qchar (uchar ch)