CString型別轉char型別出現中文亂碼問題

2022-05-10 05:00:29 字數 1048 閱讀 6810

一般來說cstring型別的變數具有很強的操作性,但有時為了使用某些c函式,必須將cstring型別的變數轉換為char陣列型別。關於cstring轉char的方法,網上查了查,發現大都沒介紹清楚,這裡寫出來做個小結,加深下印象。

為完成他們之間的轉換,首先得說明一下他們所佔的記憶體大小。cstring屬於所謂的寬字符集,佔乙個字元佔兩個位元組; char型別屬於窄字符集,乙個char字元佔乙個位元組。故他們之間的轉換涉及到位元組大小的轉換。另一方面mfc中ctring,預設採用unicode編碼,而char採用ansi編碼,兩種編碼中單個字元佔的儲存大小也是不同的。

將cstring轉char,會用到乙個函式 widechartomultibyte, 其實unicode與utf-8的互轉,unicode與ansi的互轉,均可以利用此函式完成,該函式的原型為

int widechartomultibyte(uint codepage, dword dwflags, lpcwstr lpwidecharstr, int cchwidechar, lpstr lpmultibytestr,int cchmultibyte, lpcstr lpdefaultstr, lpbool lpuseddefaultchar);

該函式的引數介紹就不說了,多看幾次就記住了。cstring變數中有中文等多位元組字元,就要注意codepage的型別,如果要寫出到檔案,還要注意轉換的編碼和檔案的編碼一致,不然開啟仍然亂碼。下面貼出簡短**

view code

1 cstring tmp(_t("

程式猿")); //

待轉換cstring變數

2 wchar_t *ptr;

3char buf[16]; //

目標儲存空間

45 ptr=tmp.getbuffer(tmp.getlength()*sizeof

(wchar_t));

6 widechartomultibyte(cp_acp, 0, (lpcwstr)ptr, -1, buf, sizeof(buf), null, null);

UniCode下CString轉char 的方法

1unicode下cstring轉換為char 2unicode下char 轉換為cstring 今天進行檔案操作時,將cstring的getbuffer 後直接倒到char陣列後寫入檔案發現 每個字元與字元之間都有乙個空格存在,而且有內容丟失。原來cstring類物件getbuffer 後以後還是...

c string型別轉換為char 型別

string 是c 標準庫裡面其中乙個,封裝了對字串的操作 把string轉換為char 有3中方法 1。data 如 string str abc char p str.data 2.c str 如 string str gdfd char p str.c str 3 copy 比如 string...

Cstring 轉 char 的正確做法

在網上找了很多資料,試了很多辦法,在面對有中文字元的cstring時,都無能無力,在這裡就不貼那些錯誤做法了,擾亂視聽 正確的方法 cstring str dworddwnum widechartomultibyte cp oemcp,null,str,1,null,null,0,null char...