unicode,ansi编码转换

unicode,和ansi编码转换主要应用WideCharToMultiByte,MultiByteToWideChar,以下是应用方法
BOOL AnsiToUnicode(LPSTR pszA, LPWSTR* ppszW)
{

DWORD cCharacters;

if (NULL == pszA)
{
*ppszW = NULL;
return FALSE;
}

cCharacters = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, pszA, -1,
0, 0);

*ppszW = (LPWSTR) LocalAlloc(cCharacters*2);//字节长度应该为ANSI的2倍
if (NULL == *ppszW)
return FALSE;

// Unicode转换 -1指定根据'/0'来判断长度,如果'/0'后也需要转换而输入其实际长度
//而输出的unicode长度要为其实际的子串长度,也就是说要WCHAR为单位
if (0 == MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, pszA, -1,
*ppszW, cCharacters))
{
LocalFree(*ppszW);
return FALSE;
}

return TRUE;
}


BOOL UnicodeToAnsi(LPWSTR pszW, LPSTR* ppszA)
{

DWORD cCharacters;

if (pszW == NULL)
{
*ppszA = NULL;
return FALSE;
}

cCharacters = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, pszW, -1,
  NULL,NULL, NULL, NULL);

//因为是ansi所以字节数就为其个数
*ppszA = (LPSTR) LocalAlloc(cCharacters);
if (NULL == *ppszA)
return FALSE;

//ansi转换.
if (0 == WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, pszW, -1,
*ppszA,cbAnsi, NULL, NULL))
{
LocalFree(*ppszA);
return FALSE;
}
return TURE;
}
记得退出之前LocalFree掉这块内存就ok了.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值