1. 程式人生 > >C++_字串位元組碼

C++_字串位元組碼

1.字串:

型別wchar_t,size 4bytes;【搭配L】,L"漢字",字串中,\0佔4個位元組(一般C++中應用);

型別char,size 1bytes;utf-8中文佔3個位元組;"漢字",字串中,\0佔1個位元組;

gb2312佔兩個位元組;

UTF-8:

linux預設使用的編碼,型別char,單位位元組為1位元組,無大小端問題,適合網路傳輸;

但是對於漢字,至少需要3個位元組來表示(linux,一般C中應用);網路傳輸浪費頻寬,並且不易用下標表示漢字。

UTF-16:

window預設使用的Unicode(統一碼、萬國碼、單一碼),型別wchar_t,單位位元組2位元組,基本可以表示常見的漢字。

linux預設wchar_t,單位位元組4位元組,可以表示所有漢字。

PS:

char *型別的字面值,最終記憶體使用何種編碼方式完全取決於當前檔案的編碼方式。

檔案是GBK編碼,檔案中 char * str = "漢字",str 指向的記憶體字串,二進位制使用GBK編碼。

檔案是UTF-8編碼,檔案中 char * str = "漢字",str指向的記憶體字串,二進位制使用UTF-8編碼。

所以,字串應該放在資原始檔裡,而不是硬編碼在.h/.cpp檔案裡。

EXA:

Unicode定義,“漢字”對應的數字是 0x6c49和0x5b57,而編碼的程式資料是【小端儲存(低位元組靠前)】:

BYTE data_utf8[] = {0xE6, 0xB1, 0x89, 0xE5, 0xAD, 0x97}; // UTF-8編碼
           WORD data_utf16[] = {0x6c49, 0x5b57}; // UTF-16編碼
           DWORD data_utf32[] = {0x6c49, 0x5b57}; // UTF-32編碼