(转载)说说char
生活随笔
收集整理的這篇文章主要介紹了
(转载)说说char
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
char一直都在使用并且大量的使用,但是,大部分都是在單一平臺上,那樣沒有太多的問題,在windows上大量直接使用wchar_t來解決中文的問題。并且在使用跨平臺時也大多直接使用了Qt的QString來節省了很多的麻煩,但是現在項目中有不允許引入第三方庫來處理字符串處理的問題,在linux直接使用char完全沒有問題,而在windows上卻成了亂碼。為了解決這個問題,我研究了一下兩個平臺下char的不同。下面是我的測試代碼:
?
char *a = "zh中";cout << "char:" << sizeof(a) << a << "[" << a[0] << a[1] << a[2] << a[3] << a[4] <<"]" << endl;printf("%x, %x, %x, %x, %x\n", a[0], a[1], a[2], a[3], a[4]);wchar_t *b = L"zh中";cout << "wchar:" << sizeof(b) << b << "[" << b[0] << b[1] << b[2] << b[3] << b[4] << "]"<< endl;printf("%x, %x, %x, %x, %x\n", b[0], b[1], b[2], b[3], b[4]);string c = "zh中";cout << "string:" << sizeof(c) << c << "[" <<c.c_str()[0] << c.c_str()[1] << c.c_str()[2] <<c.c_str()[3] << c.c_str()[4] << "]" << endl;wstring d = L"zh中";wcout << "wstring:" << sizeof(d) << "[" <<d.c_str()[0] << d.c_str()[1] << d.c_str()[2] <<d.c_str()[3] << d.c_str()[4] << "]" << endl;windows運行結果:
linux運行結果:
通過運行結果可以看出
?
- windows和linux上英文是相同的都是ascii碼.
- 中文部分char是不同的,wchar_t是相同的。
- b[4]已經不在是字符串的值了。每個wchar_t是占兩個字節的長度。
- wstring是使用wchar_t存儲的,string是使用char來存儲的。
?
下面具體查看一下內存里的數據,windows下內存:
linux下內存:
char“中”的編碼在windows下是0xd6 0xd0,查詢GB2312碼表剛好是"中"。在linux下是0xe4 0xb8 0xad,查詢是UTF-8碼表的”中“。wchar”中“的編碼0x4e2d很明顯是Unicode編碼。
結論:
?
- vc在windows平臺將char使用gb2312來存儲中文。
- gcc在linux平臺將char使用utf-8來存儲文本。
- 兩者都將wchar_t使用unicode來存儲。
- string使用char作為存儲容器。
- wstring使用wchar_t來作為存儲容器。
轉載于:https://www.cnblogs.com/Robotke1/archive/2013/05/11/3072493.html
總結
以上是生活随笔為你收集整理的(转载)说说char的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL 计算两个时间的差值
- 下一篇: java+redis+lua生成自动增长