ANSI字元和UNICODE字元的轉換

2021-09-30 08:38:31 字數 2185 閱讀 5415

此方法經常用於vc寫的dll或ocx函式的返回值中,而且此dll或ocx函式是供vb或js呼叫的。

函式返回使用下面的格式返回

return sysallocstring((bstr)wtext);//wtext是轉換後的unicode字串 或

return sysallocstring((bstr)stext);//stext是轉換後的多位元組字串

ansi字元也叫多位元組字元,短字元,漢字占用2個位元組,ascii字元占用1個位元組,比如char stemp="中間1";需要分配6個位元組,最後乙個位元組是字串結束位元組(0值)。

unicode字元也叫寬字元,每乙個字元(漢字或ascii字元)占用2個位元組(16位)。他們之間的相互轉換使用下面兩個函式

int multibytetowidechar(

__in   uint codepage,//經常用cp_acp

__in   dword dwflags,//經常為0

__in   lpcstr lpmultibytestr,//多位元組字串

__in   int cbmultibyte,//多位元組字串的長度,常用-1表示全部長度

__out  lpwstr lpwidecharstr,//轉換後的unicode字元

__in   int cchwidechar//存放unicode字元空間大小,);

int widechartomultibyte(

__in   uint codepage,,//經常用cp_oemcp

__in   dword dwflags,//經常為0

__in   lpcwstr lpwidecharstr,//unicode字串

__in   int cchwidechar,//unicode字串長度,常用-1表示全部長度

__out  lpstr lpmultibytestr,//轉換後的多位元組字串

__in   int cbmultibyte,//存放多位元組字串空間的大小

__in   lpcstr lpdefaultchar,//經常為null

__out  lpbool lpuseddefaultchar//經常為false);

在不考慮空間浪費的情況下,轉換較短的字串**換後字元空間在轉換前固定,不使用動態分配),轉換函式可封裝成下面的兩個函式

bool mbytetowchar(lpcstr lpcszstr, lpwstr lpwszstr, dword dwsize)

multibytetowidechar (cp_acp, 0, lpcszstr, -1, lpwszstr, dwminsize);  

return true;}/

bool wchartombyte(lpcwstr lpwszstr, lpstr lpcszstr, dword dwsize)

widechartomultibyte(cp_oemcp,null,lpwszstr,-1,lpcszstr,dwminsize,null,false);

return true;

}使用方法如下:

wchar_t wtext[10] = l"函式示例";

char stext[20]= ;//轉換後字元空間在轉換前固定,不使用動態分配

wchartombyte(wtext, stext, sizeof(stext)/sizeof(stext[0]));

mbytetowchar(stext, wtext, sizeof(wtext)/sizeof(wtext[0]));

如果字串很長,則可以考慮使用動態分配

先使用dwminsize = multibytetowidechar (cp_acp, 0, lpcszstr, -1, null, 0);//得到實際需要的unicode字元空間大小

或dwminsize = widechartomultibyte(cp_oemcp,null,lpwszstr,-1,null,0,null,false);//得到實際需要的多字元空間大小

得到實際需要的大小,然後分配空間

wchar_t *wtext = new wchar_t[dwminsize];

或char *stext = new char[dwminsize]

最後呼叫

mbytetowchar(stext, wtext, dwminsize);

或wchartombyte(wtext, stext, dwminsize);

ansi字元,unicode字元

編碼指不同國家的語言在計算機中的一種儲存和解釋規範 ansi與ascii 最初,internet上只有一種字符集 ansi的ascii字符集 american standard code for information interchange,美國資訊交換標準碼 它使用7 bits來表示乙個字元,總...

ANSI與Unicode字元巨集轉換

ansi 操作函式以 str開頭,如 strcpy strcat strlen unicode 操作函式以 wcs開頭,如 wcscpy wcscpy wcslen ansi unicode 操作函式以 tcs 開頭 tcscpy c執行期庫 ansi unicode 操作函式以 lstr 開頭ls...

編碼基礎概念 ANSI和unicode

ansi指american national standards institute 美國國家標準學會 ansi編碼不是一種具體的編碼方式,而是一種指定在某些環境下使用某些編碼方式的標準。比如,在中文環境中ansi的編碼標準為gbk,在日語環境中ansi的編碼標準則是shift jis編碼。asci...