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)、游戲輔助等