C语言下Unicode字符串与多字节字符串转换方法

1.Unicode字符串转换为多字节字符串:

size_t wlen = 0;
wchar_t *wstr = (wchar_t*)pSrc; //source unicode string
size_t byteLen =0; //unicode string length in byte 
size_t coverted = 0;
char retBuf[MODEL_CODEC_MAX_VALUE_LEN];
ST_RET ret = SD_FAILURE;


setlocale(LC_ALL,"chs");//setlocale(LC_ALL,"chs")会改变整个应用程序的字符集编码方式,调用完之后使用 //setlocale(LC_ALL,"C")还原。
wlen = wcslen(wstr);
byteLen = wlen * 2 + 1;

memset(retBuf,0,MODEL_CODEC_MAX_VALUE_LEN);
if(0 != wcstombs_s(&coverted,retBuf,MODEL_CODEC_MAX_VALUE_LEN,wstr,_TRUNCATE))
{
ret = SD_FAILURE;
}
else
{
ret = SD_SUCCESS;
}
setlocale(LC_ALL,"C");
assert(strlen(retBuf) < MODEL_CODEC_MAX_VALUE_LEN);
if(ret == SD_SUCCESS)
{
if(0 != strncpy_s(text,MODEL_CODEC_MAX_VALUE_LEN,retBuf,MODEL_CODEC_MAX_VALUE_LEN))
{
ret = SD_FAILURE;
}
}
return ret;

2.多字节字符串转换为Unicode字符串

setlocale(LC_ALL,"chs");
size_t len = strlen(text);
size_t converted = 0;
const int retLen = 512/sizeof(wchar_t);
wchar_t *retBuf = new wchar_t[retLen];
memset(retBuf,0,retLen);
bool ret = false;
if (0 != mbstowcs_s(&converted,retBuf,retLen,str,_TRUNCATE))
{
ret = false;
}
else
{
ret = true;
}
setlocale(LC_ALL,"C");
if (ret == true)
{
if (0 != wcsncpy_s(wstr,wcslen(retBuf)+1,retBuf,wcslen(retBuf)))
{
ret = false;
}
}
delete [] retBuf;
retBuf = 0;
return ret;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值