C語言/C++程序員編程學(xué)習(xí)之unicode編碼與ansi編碼

C語言是面向過程的晃痴,而C++是面向?qū)ο蟮?/p>

C和C++的區(qū)別:

C是一個(gè)結(jié)構(gòu)化語言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程冬阳,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)。

C++党饮,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型肝陪,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問題域,這樣就可以通過獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制刑顺。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣氯窍。之所以說C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”蹲堂。

C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣狼讨。之所以說C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”柒竞,而就語言本身而言政供,在C中更多的是算法的概念。那么是不是C就不重要了朽基,錯(cuò)布隔!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒有好的算法稼虎,一樣不行衅檀。而且,“C加上好的設(shè)計(jì)”也能寫出非常好的東西霎俩。

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九哀军,四七零沉眶,五九六 】,無論你是大牛還是小白排苍,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)沦寂!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享淘衙!

在學(xué)習(xí)字符串時(shí)一定會(huì)碰到CString的字符串要轉(zhuǎn)換為char*的問題传藏,在此總結(jié)一下unicode工程下的字符串處理問題。

Ansi與Unicode簡(jiǎn)要說明及各自的優(yōu)缺點(diǎn)彤守。

他們是兩種字符的編碼格式毯侦,Ansi表示窄字節(jié),Unicode表示寬字節(jié)具垫,Ansi用char格式表示一個(gè)字符侈离,占用一個(gè)字節(jié)的存儲(chǔ)空間,最多表示255個(gè)字符筝蚕,表示英文還可以卦碾,但對(duì)于中文、日文起宽、韓文等語言來說就不夠用了洲胖,所以如果你的程序是Ansi編碼的話,那么你寫的中文語言的程序拿到日文坯沪、韓文等系統(tǒng)上面就會(huì)出現(xiàn)亂碼绿映。所以有了Unicode,用二個(gè)字節(jié)去表示一個(gè)字符腐晾,格式是 unsigned short叉弦,被定義成 wchar_t 格式這樣就可以表示世界上絕大多數(shù)的語言了!但有利就有弊藻糖,缺點(diǎn)呢淹冰?就是空間占用翻倍了,網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量也增大了巨柒。

Windows 2000 及其以后的 Xp榄棵、2003、Vista潘拱、Win7 等系統(tǒng)都是使用Unicode從頭進(jìn)行開發(fā)的疹鳄,如果調(diào)用任何一個(gè)Windows API 函數(shù)并給它傳遞一個(gè) ANSI 字符串,那么系統(tǒng)首先要將字符串轉(zhuǎn)換成Unicode芦岂,然后將Unicode字符串傳遞給操作系統(tǒng)瘪弓。如果希望函數(shù)返回ANSI字符串,系統(tǒng)就會(huì)先將Unicode字符串轉(zhuǎn)換成ANSI字符串禽最,然后將結(jié)果返回給你的應(yīng)用程序腺怯。進(jìn)行這些字符串的轉(zhuǎn)換需要占用系統(tǒng)的時(shí)間和內(nèi)存袱饭。為了避免系統(tǒng)轉(zhuǎn)換消耗的資源通常都使用unicode。

不同編碼格式下的字符串處理及相互轉(zhuǎn)化呛占。

在編程時(shí)經(jīng)常遇到的數(shù)據(jù)類型:

Ansi:

char虑乖、char * 、const char *

CHAR晾虑、(PCHAR疹味、PSTR、LPSTR)帜篇、LPCSTR

Unicode:

wchar_t糙捺、wchar_t * 、const wchar_t *

WCHAR笙隙、(PWCHAR洪灯、PWSTR、LPWSTR)竟痰、LPCWSTR

T 通用類型:

TCHAR签钩、(TCHAR * 、PTCHAR坏快、PTSTR边臼、LPTSTR)、LPCTSTR

以上假消,其中:P代表指針的意思,STR代表字符串的意思岭接,L是長(zhǎng)指針的意思富拗,在WIN32平臺(tái)下可以忽略,C代表const常量的意思鸣戴,W代表wide寬字節(jié)的意思啃沪,T表示模板,也就是通用的意思窄锅,在使用時(shí)系統(tǒng)會(huì)根據(jù)當(dāng)前的工程性質(zhì)進(jìn)行轉(zhuǎn)換创千。例如在unicode下,TCHAR其實(shí)就是wchar_t入偷,否則就被定義成char追驴。

字符串類型的對(duì)象的定義:

Ansi:char *pAnsiStr = "hello";

Unicode:wchar_t *pUnicodeStr = "hello";

通用類型:TCHAR *pTStr = _T("hello"); 或者 TCHAR *pTStr = _TEXT("hello");(_T,_TEXT是一個(gè)意思)

動(dòng)態(tài)申請(qǐng)內(nèi)存:TCHAR *pszBuf = new TCHAR[100];

Ansi 與 Unicode 字符串類型的互相轉(zhuǎn)換:

上面給大家介紹的都是窄字節(jié)就是窄字節(jié),寬字節(jié)就是寬字節(jié)疏之,那么下面就給大家介紹下他們兩個(gè)之間的轉(zhuǎn)換殿雪。

在程序中還是不建議大家來回來去的進(jìn)行字符串編碼的轉(zhuǎn)換,要么就都使用Ansi锋爪,要么就都使用Unicode丙曙,

但是呢爸业,往往有些 API 函數(shù)只提供了窄字節(jié)版本(比如:GetProcAddress,見MSDN)或者只提供寬字節(jié)版本(比如:CommandLineToArgvW亏镰,見MSDN)扯旷,

這個(gè)時(shí)候就要進(jìn)行字符串編碼格式的轉(zhuǎn)換了。

但是索抓,這里提醒下大家钧忽,不是所有的都需要轉(zhuǎn)換,有一些是不需要轉(zhuǎn)換的纸兔,比如 socket 中的 send 或者 recv 函數(shù).

字符串占用字節(jié)數(shù):

Ansi:

char szStr[] = "abc";

占用字節(jié)數(shù)求法:sizeof(szStr);

char *psz = "defgh";

占用字節(jié)數(shù)求法:strlen(psz)*sizeof(char);

Unicode:

wchar_t szwStr[] = L"abc";

占用字節(jié)數(shù)求法:sizeof(szwStr);

wchar_t *pwsz = L"defgh";

占用字節(jié)數(shù)求法:wcslen(pwsz)*sizeof(wchar_t);

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九惰瓜,四七零,五九六 】汉矿,無論你是大牛還是小白崎坊,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具洲拇,很多干貨和技術(shù)資料分享奈揍!

通用函數(shù):

TCHAR szStr[] = _T("abc");

占用字節(jié)數(shù)求法:sizeof(szStr);

TCHAR *psz = _T("defgh");

占用字節(jié)數(shù)求法:_tcslen(psz)*sizeof(TCHAR);

轉(zhuǎn)換用到的最根本的 API 函數(shù):

WideCharToMultiByte 實(shí)現(xiàn)寬字節(jié)轉(zhuǎn)換到窄字節(jié)

MultiByteToWideChar 實(shí)現(xiàn)窄字節(jié)轉(zhuǎn)換到寬字節(jié)

A2W、W2A赋续、T2A男翰、T2W 宏的使用以及注意事項(xiàng):

其實(shí)這些宏根本上還是用到了上面的兩個(gè)函數(shù)。

[1]纽乱、這些函數(shù)都是在棧中分配空間的蛾绎。例如:A2W("abc"),就會(huì)在棧中分配一塊內(nèi)存存放'abc'

[2]使用上面的宏之前都要使用USES_CONVERSION宏

*unicode下CString與char*的轉(zhuǎn)換:

CString轉(zhuǎn)換為char*:使用wcstombs()函數(shù)

例子:

CString str;

str="你好鸦列,hello"租冠;

char ch[50];

wcstombs(ch,str,siezof(ch));

這樣的轉(zhuǎn)換會(huì)出現(xiàn)問題,原因是str帶有中文薯嗤,如果帶有中文還在之前使用setlocale(LC_ALL,""),要包含頭文件;設(shè)置一下默認(rèn)語言顽爹。

char*轉(zhuǎn)換為CString:使用A2T()函數(shù):

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九,四七零骆姐,五九六 】镜粤,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)玻褪!裙內(nèi)有開發(fā)工具肉渴,很多干貨和技術(shù)資料分享!

例子:

USES_CONVERSION;

char ch[5]="what";

CString str;

str=A2T(ch);

~~~end~~~

這些是C/C++能做的

服務(wù)器開發(fā)工程師带射、人工智能黄虱、云計(jì)算工程師、信息安全(黑客反黑客)庸诱、大數(shù)據(jù) 捻浦、數(shù)據(jù)平臺(tái)晤揣、嵌入式工程師、流媒體服務(wù)器朱灿、數(shù)據(jù)控解昧识、圖像處理、音頻視頻開發(fā)工程師盗扒、游戲服務(wù)器跪楞、分布式系統(tǒng)、游戲輔助等

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侣灶,一起剝皮案震驚了整個(gè)濱河市甸祭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌褥影,老刑警劉巖池户,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異凡怎,居然都是意外死亡校焦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門统倒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寨典,“玉大人,你說我怎么就攤上這事房匆∷食桑” “怎么了?”我有些...
    開封第一講書人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵浴鸿,是天一觀的道長(zhǎng)井氢。 經(jīng)常有香客問我,道長(zhǎng)赚楚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任骗卜,我火速辦了婚禮宠页,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寇仓。我一直安慰自己举户,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開白布遍烦。 她就那樣靜靜地躺著俭嘁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪服猪。 梳的紋絲不亂的頭發(fā)上供填,一...
    開封第一講書人閱讀 52,874評(píng)論 1 314
  • 那天拐云,我揣著相機(jī)與錄音,去河邊找鬼近她。 笑死叉瘩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粘捎。 我是一名探鬼主播薇缅,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼攒磨!你這毒婦竟也來了泳桦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤娩缰,失蹤者是張志新(化名)和其女友劉穎灸撰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漆羔,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梧奢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了演痒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亲轨。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸟顺,靈堂內(nèi)的尸體忽然破棺而出惦蚊,到底是詐尸還是另有隱情,我是刑警寧澤讯嫂,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布蹦锋,位于F島的核電站,受9級(jí)特大地震影響欧芽,放射性物質(zhì)發(fā)生泄漏莉掂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一千扔、第九天 我趴在偏房一處隱蔽的房頂上張望憎妙。 院中可真熱鬧,春花似錦曲楚、人聲如沸厘唾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荆隘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鹤树,已是汗流浹背铣焊。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留魂迄,地道東北人粗截。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像捣炬,于是被迫代替她去往敵國和親熊昌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容