中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Windows核心編程(3)字符編碼詳解

發布時間:2020-06-17 01:02:02 來源:網絡 閱讀:1001 作者:超級極客 欄目:編程語言

一、字符編碼 詳細介紹


1.字節(Byte)是一種計量單位,他是計算機信息技術存儲容量的一種單位


2.字符的意義: 字符數計算機文字中使用的文字和符號,比如1,2,3,4,~,@,!,%,^等待


3.在不同編碼里字符和字節對應的關系不同

a.在ASCLL碼中,一個英文字母(不區分大小寫)占一個字節(8bit),一個漢子占兩個字節(16bit)

b.UTF-8編碼中,一個英文字符等于一個字節,一個中文(含繁體)等于三個字節

c.在Unicode編碼中,一個英文兩個字節, 一個中文(含繁體)占兩個字節

d.英文符號占一個字節,中文符號占兩個字節



4.多字符集 : 各國文字編碼喲重疊的編碼(編碼沖突)導致亂碼

a.最開始,internet上只有一種字符集------ANS的ASCLL字符集,他用7bits表示一個字符,

總共表示128個字符,包括英文字母,數字,標點符號,之后進行擴展,使用8bits表示一個字符

可以表示256個字符, 再原來的7bits基礎上加入了一些特殊字符.

b.后來各國語音的加入,ASCLL已經不能滿足需求,各國都在ASCLL的基礎上制定了自己的

字符集, 這些從ANSL標準派生的字符集被習慣的稱為ANSL字符集

正式名稱MBCS(Multi-Byte Chactacter System,即多字節字符系統),每種語言都有自己的字符集

導致各種字符集實在太多,在國際交流中非常不便, 因此提出了Unicode字符集

它固定使用16 bits(兩個字節、一個字)來表示一個字符,共可以表示65535個字符,將世界上

所有語音常用字符都收錄其中,(Unicode標準稱為UTF-16),后來為了能使雙字節的Unicode

能夠在現存的處理單字節系統上正確傳輸,出現了UTF-8,使用MBCS的方式對Unicode進行編碼.

UTF-8是編碼,它屬于Unicode字符集,


5.Windows定義了一些數據類型

a.wchar_t 就是兩個字節 帶有W的都是這個類型

b.WCHAR Unicode字符 他其實就是wchar_t 

c.PWSTR 指向Unicode字符串的指針 wchar_t *

d.PCWSTR 指向一個常量的Unicode const wchar_t * 

e.對應多字節的類型為 CHAR,LPSTR,LPCSTR

f.ASNL/Unicode通用數據類型,

TCAHR 多字符集中為char, Unicode中為wchar_t

PTSTR 多字符集中為char *, Unicode中為wchar_t *

LPCTSTR 多字符集中為const char *, Unicode中為const wchar_t *

f.帶有A就是多字符集, W就是Unicode(款字符),T就是通用的



7.Windows中多字符集和Unicode相互轉化的API

a.WideCharToMultiByte 映射一個Unicode字符串到多字節字符串

b.MultiByteToWideChar 映射一個多字節字符串到Unicode字符串


8.函數 使用上面的函數比較復雜  則可以使用下面的宏函數

使用之前要先聲明標識符 USES_CONVERSION;

A2W: 將多字節 轉 寬字節

USES_CONVERSION
CString str;
char* AChar = "abcdefg";
wchar_t* WChar = A2W(AChar); 
str = WChar;

W2A: 將款字節 轉 多字節

USES_CONVERSION;
wchar_t* AChar = L"abcdefg啊";
char* WChar = W2A(AChar);

T2A: T代表跟隨系統 轉 多字節

USES_CONVERSION;  
char * pChar="char to cstring";  
CString cTemp=A2T(pChar);

T2W: 系統類型 轉 款字節

SES_CONVERSION;  
CString cTemp =_T("char to cstring");  
char * pChar=A2T(pChar);


9.謹慎使用上面的宏函數轉換

a.如果你在一個循環里使用這個函數 可能會引起堆棧溢出

因為你查看代碼發現他函數里面會調用alloc申請內存,他會在函數的棧中分配,

VC編譯器默認是2M,在一個循環中調用這個函數就會一直分配內存.


b.解決辦法最好是使用 WideCharToMultiByte  MultiByteToWideChar 

這兩個API,  把這兩個API封裝一下, 使用就很方便了.



10.使用THAR _TEXT 可以同時適應Unicode和多字節字符集



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平塘县| 察隅县| 崇信县| 尉犁县| 银川市| 商南县| 长沙市| 英山县| 密山市| 朝阳县| 嘉祥县| 荥经县| 兴安县| 康马县| 酒泉市| 华亭县| 朝阳市| 永川市| 浏阳市| 张家口市| 正蓝旗| 靖远县| 田阳县| 历史| 太谷县| 达孜县| 黑水县| 岐山县| 高州市| 新津县| 醴陵市| 金门县| 安达市| 房山区| 萨迦县| 丰城市| 天津市| 天门市| 弥勒县| 溧水县| 镇雄县|