wince字符转换函数及应用

 大家都知道wince下字符集是unicode字符集,因此在wince开发时经常会遇到unicode与ansi转换的问题,而常用的转换函数就为WideCharToMultiByte(宽字符集转多字符集),MultiByteToWideChar(多字符集转宽字符集),然而初学者在应用这两个函数时常常会犯一些概念性的错误。下面我就对这两个函数的使用做一下简单说明,希望初学者不要在这个上面犯错误,如果是函数出错,会造成缓冲区溢出,错误不好发现。
(1)宽转多函数
int WideCharToMultiByte(
  UINT CodePage,
  DWORD dwFlags,
  LPCWSTR lpWideCharStr,
  int cchWideChar,
  LPSTR lpMultiByteStr,
  int cbMultiByte,
  LPCSTR lpDefaultChar,
  LPBOOL lpUsedDefaultChar
);
UINT CodePage;//字符集代码页
DWORD dwFlags;//该标志一般设置为0,具体请看EVC帮助
LPCWSTR lpWideCharStr;///宽字符串
int cchWideChar;//宽字符串的长度,以字符为单位,如果此值设为-1,则函数自动获得宽字符串的长度,编程中此值一般设置为-1       
LPSTR lpMultiByteStr;多字节字符串缓冲区指针,
int cbMultiByte;//转换后多字节的缓存最大值(用字节来计算),如果传递0,则本函数返回目标缓存的大小值
LPCSTR lpDefaultChar;/当宽字节字符串的有字符在代码页中无法转换时,返回这个变量所指的值,一般设为NULL;
LPBOOL lpUsedDefaultChar;这个值可以用来监测转化是否成功,通常设为NULL;

(2)多转宽函数
int MultiByteToWideChar(
  UINT CodePage,
  DWORD dwFlags,
  LPCSTR lpMultiByteStr,
  int cbMultiByte,
  LPWSTR lpWideCharStr,
  int cchWideChar
);
UINT CodePage;字符集代码页
DWORD dwFlags;该标志一般设置为0,具体请看EVC帮助
LPCSTR lpMultiByteStr;/多字节字符串
int cbMultiByte;/多字节字符串长度,以字节为单位,如果此值设为-1,则函数自动获得多字节字符串长度.编程中一般设置为-1
LPWSTR lpWideCharStr;/宽字符串缓冲区指针
int cchWideChar;//宽字符串缓冲区最大值(以字符为单位),如果传0,则函数返回转化后缓冲区大小,为字符个数

(3)MultiByteToWideChar转化实例

void MultiByte_To_WideChar_Convert()
{
//(1)声明转换前的字符串
char chSource_Char[] = "hello world";

//(2)调用MultiByteToWideChar,为lpWideCharStr传递NULL , cchWideChar 传递0
int iWide_Buffer_Size = MultiByteToWideChar(CP_ACP , 0 , chSource_Char , -1 , NULL , 0);

//(3)声明宽字符缓冲区
WCHAR * pwchWide_Char = new WCHAR[iWide_Buffer_Size + 1];
if(pwchWide_Char == NULL)
{
        AfxMessageBox(L"内存分配失败");
        return;
}
memset(pwchWide_Char , 0 , (iWide_Buffer_Size + 1)*sizeof(WCHAR));

//(4)转化
MultiByteToWideChar(CP_ACP , 0 , chSource_Char , -1 , pwchWide_Char , iWide_Buffer_Size);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值