日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(转载)说说char

發布時間:2023/12/18 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (转载)说说char 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

char一直都在使用并且大量的使用,但是,大部分都是在單一平臺上,那樣沒有太多的問題,在windows上大量直接使用wchar_t來解決中文的問題。并且在使用跨平臺時也大多直接使用了Qt的QString來節省了很多的麻煩,但是現在項目中有不允許引入第三方庫來處理字符串處理的問題,在linux直接使用char完全沒有問題,而在windows上卻成了亂碼。為了解決這個問題,我研究了一下兩個平臺下char的不同。下面是我的測試代碼:

?

char *a = "zh中";cout << "char:" << sizeof(a) << a << "[" <<&nbsp;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 << "[" <<&nbsp;b[0] << b[1] << b[2] << b[3] << b[4] <<&nbsp;"]"<< 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) << &nbsp;"[" <<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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。