1unicode下cstring轉換為char
2unicode下char 轉換為cstring
今天進行檔案操作時,將cstring的getbuffer()後直接倒到char陣列後寫入檔案發現 每個字元與字元之間都有乙個空格存在,而且有內容丟失。原來cstring類物件getbuffer(),後以後還是unicode編碼,所以必須將寬字元轉換成char型別那就必須用到乙個函式
》cstring、string 和char* 之間的轉換總結
char*轉換成cstring
//可以直接構造.如下:
char* p="test";
cstring cstr(p);
//可以用成員函式format 如下:
char* p="test";
cstring cstr;
cstr.format("%s",p);
char*轉換成string//直接從char*構造出string就可以了
chat* sz="cwsasd";
string str(sz);
string轉換成char*char *tp=const_cast
(str.c_str());
string轉換成cstringcstring cstr;
cstr.format(l"%s",str.c_str());
cstring轉換成char*cstring str("test");
intlen=str.getlength();
char *cstr=new char[len+1];
cstr[len]=0;
widechartomultibyte(cp_oemcp, 0, str, -1, cstr, len, null, null);
cstring轉換成string// 方法:【先將cstring轉換成char*, 然後從char*構造出string】
cstring t = cstring(s[i]);
intlen=t.getlength();
char *cstr=new char[len
+1];
cstr[len]=0;
widechartomultibyte(cp_oemcp,0, t,-1, cstr, len, null, null);
string s1(cstr);
網上查了下解決方法如下:
在visual c++.net2005中,預設的字符集形式是unicode,但在vc6.0等工程中,預設的字符集形式是多位元組字符集(mbcs:multi-byte character set),這樣導致在vc6.0中非常簡單實用的各類字元操作和函式在vs2005環境下執行時會報各種各樣的錯誤,這裡總結了在visual c++.net2005環境中unicode字符集下cstring和char *之間相互轉換的幾種方法,其實也就是unicode字符集與mbcs字符集轉換。
cstring str = _t("d://校內專案");
//注意:以下n和len的值大小不同,n是按字元計算的,len是按位元組計算的
int n = str.getlength(); // n = 14, len = 18
//獲取寬位元組字元的大小,大小是按位元組計算的
int len = widechartomultibyte(cp_acp,0,str,str.getlength(),null,0,null,null);
//為多位元組字元陣列申請空間,陣列大小為按位元組計算的寬位元組位元組大小
char * pfilename = new
char[len+1]; //以位元組為單位
//寬位元組編碼轉換成多位元組編碼
widechartomultibyte(cp_acp,0,str,str.getlength(),pfilename,len,null,null);
pfilename[len+1] = '/0'; //多位元組字元以'/0'結束
》有關uses_conversion的注意事項1
cstring str = _t("d://校內專案");
//宣告識別符號
uses_conversion;
//呼叫函式,t2a和w2a均支援atl和mfc中的字元轉換
char * pfilename = t2a(str);
//char * pfilename = w2a(str); //也可實現轉換
注意:有時候可能還需要新增引用#include
char * pfilename = "d://校內專案";
//計算char *陣列大小,以位元組為單位,乙個漢字佔兩個位元組
int charlen = strlen(pfilename);
//計算多位元組字元的大小,按字元計算。
intlen = multibytetowidechar(cp_acp,0,pfilename,charlen,null,0);
//為寬位元組字元陣列申請空間,陣列大小為按位元組計算的多位元組字元大小
tchar *buf = new tchar[len +1];
//多位元組編碼轉換成寬位元組編碼
multibytetowidechar(cp_acp,0,pfilename,charlen,buf,len);
buf[len] = '/0'; //新增字串結尾,注意不是len+1
//將tchar陣列轉換為cstring
cstring pwidechar;
//刪除緩衝區
delete buf;
char * pfilename = "d://校內專案";
uses_conversion;
cstring s = a2t(pfilename);
//cstring s = a2w(pfilename);
//多位元組字符集,在vc6和vc7種可以編譯通過的語句,但vs2005不能通過,預設為unicode字符集
//afxmessagebox("載入資料失敗",0);
//書寫**使用text("")或_t(""),文字在unicode和非unicode程式裡都通用
afxmessagebox(_t("載入資料失敗"),0);
注意:直接轉換在基於mbcs的工程可以,但在基於unicode字符集的工程中直接轉換是不可行的,cstring會以unicode的形式來儲存資料,強制型別轉換只會返回第乙個字元。uses_conversion
↩
Unicode下CString與char 轉換
在visual c net2005中,預設的字符集形式是unicode,但在vc6.0等工程中,預設的字符集形式是多位元組字符集 mbcs multi byte character set 這樣導致在vc6.0中非常簡單實用的各類字元操作和函式在vs2005環境下執行時會報各種各樣的錯誤,這裡總結了...
Unicode下CString與char 轉換
unicode下cstring與char 轉換 在visual c net2005中,預設的字符集形式是unicode,但在vc6.0等工程中,預設的字符集形式是多位元組字符集 mbcs multi byte character set 這樣導致在vc6.0中非常簡單實用的各類字元操作和函式在vs2...
Unicode下的CString與char 轉換
在vs2005及以上的環境中,所見工程的預設字符集形式是unicode,而vc6.0中,字符集形式為多位元組字符集 mbcs multi byte character set 這樣導致了許多字元轉換的方法在unicode的環境中不允許使用,強制型別轉換的結果也會變得非常奇怪。如lpctstr與cha...