MultiByteToWideChar
将多字节字符串转换为宽字符串,其实按我们编程最常见到的情况理解就是把以ASCII码表示的字符串表示为UNICODE字符
串.
int MultiByteToWideChar(
UINT CodePage, //用于标识一个与多字节字符串相关的代码页号(如是ASCII码字符串,
将此参数设为CP_ACP)
DWORD dwFlags, //(一般设为0就可)它用于设定另一个控件,它可以用重音符号之类的区分
标记来影响字符.
LPCSTR lpMultiByteStr, //指定源字符串,就是ASCII码字符串,我们将把此字串转化为UNICODE字符串
int cbMultiByte, //指定源字符串中字符的个数,如果源字串包含结束符/0那么此参数可设为-1,
函数将把结束符/0一起转化为UNICODE字符串,如果指定一个确定的值,
函数将把指定数量的字符转化为UNICODE字符
LPWSTR lpWideCharStr, //指定接收转化完成的UNICODE字符串的内存的首地址.
int cchWideChar //指定接收转化完成的UNICODE字符串中字符的个数.如果此参数设为0,
lpWideCharStr设为NULL,那么此函数将返回转化完成后UNICODE字符的个数,
我们可以根据此值来动态的分配接收UNICOD字符串的内存.要注意的是,
如果此值小于cbMultiByte指定的值,函数将只完成cchWideChar
指定字符个数的转化.
);
返回值:
函数成功,将返回转化完成后UNICODE字符的个数(如果有结束符/0则/0也计算在内),
失败则返回0
例子:(UNICODE编程环境)
char *AsciiStr = "123456789";
wchar_t *UnicodeStr = NULL;
int nLenUnicode = MultiByteToWideChar(CP_ACP, 0, AsciiStr, -1, NULL, 0);
//nLenUnicode = 10
UnicodeStr = new wchar_t[nLenUnicode];
memset(UnicodeStr, 0, sizeof(wchar_t) * nLenUnicode);
nLenUnicode = MultiByteToWideChar(CP_ACP, 0, AsciiStr, -1, UnicodeStr, nLenUnicode);
//nLenUnicode = 10
MessageBox(UnicodeStr);
delete [] UnicodeStr;
UnicodeStr = NULL;
WideCharToMultiByte
将宽字符串转换为多字节字符串,其实按我们编程最常见到的情况理解就是把以UNICODE表示的
字符串转化为ASCII码字符串.
int WideCharToMultiByte(
UINT CodePage, //用于标识一个与多字节字符串相关的代码页号(如是ASCII码字符串,
将此参数设为CP_ACP)
DWORD dwFlags, //(一般设为0就可)它用于设定另一个控件,它可以用重音符号之类
的区分标记来影响字符.
LPCWSTR lpWideCharStr, //指定源字符串,就是UNICODE字符串,我们将把此字串转化为ASCII码字符串
int cchWideChar, //指定源字符串中字符的个数,如果源字串包含结束符/0那么此参数可设为-1,
函数将把结束符/0一起转化为ASCII码字符串,如果指定一个确定的值,
函数将把指定数量的字符转化为ASCII码字符
LPSTR lpMultiByteStr, //指定接收转化完成的ASCII码字符串的内存的首地址.
int cbMultiByte, //指定接收转化完成的ASCII码字符串中字符的个数.如果此参数设为0,
lpMultiByteStr设为NULL,那么此函数将返回转化完成后ASCII码字符的个数,
我们可以根据此值来动态的分配接收ASCII码字符串的内存.要注意的是,
如果此值小于cchWideChar指定的值,函数将只完成cbMultiByte
指定字符个数的转化.
LPCSTR lpDefaultChar, //当一个UNICODE字符在CodePage指定的页中找不到对应的ASCII码时,
函数将用此参数指定的字符将其代替,如果此参数为NULL,
函数将用系统默认的问号将其代替
LPBOOL lpUsedDefaultChar//如果发生过用lpDefaultChar代替的情况,则此参数返回TRUE,
如果一次也没有发生则返回FALSE,可传NULL
);
返回值:
函数成功,将返回转化完成后ASCII码字符的个数(如果有结束符/0则/0也计算在内),
失败则返回0
例子:(ASCII码编程环境)
wchar_t *UnicodeStr = L"123456789";
char *AsciiStr = NULL;
int nLenASCII = WideCharToMultiByte(CP_ACP, 0, UnicodeStr, -1, NULL, 0, NULL, NULL);
//nLenASCII = 10
AsciiStr = new char [nLenASCII];
memset(AsciiStr, 0, sizeof(char) * nLenASCII);
nLenASCII = WideCharToMultiByte(CP_ACP, 0, UnicodeStr, -1, AsciiStr, nLenASCII, NULL, NULL);
//nLenASCII = 10
MessageBox(AsciiStr);
delete [] AsciiStr;
AsciiStr = NULL;