Unicode字符与ASCII码字符的相互转化

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值