解决WideCharToMultiByte结尾乱码问题


  1、乱码情况

        CString strInput = L"学习1";
int len = WideCharToMultiByte(CP_ACP,0,strInput,strInput.GetLength(),NULL,0,NULL,NULL);
char *p = new char[len + 1];
A: WideCharToMultiByte(CP_ACP,0,strInput,strInput.GetLength(),p,len,NULL,NULL);

p[len + 1] = '\0';

       这种方式转换后的字符串末尾会乱码,就算末尾赋值为‘\0’依旧是乱码


2、修改方法

将上面标注的A行代码改为:

WideCharToMultiByte(CP_ACP,0,strInput,strInput.GetLength() + 1,p,len + 1,NULL,NULL);

或者改为:

WideCharToMultiByte(CP_ACP,0,strInput,-1,p,len + 1,NULL,NULL);

        //第4个参数 为-1时,字符串strInput将被设定为以NULL为结束符的字符串,并且自动计算长度。 


3、为什么要这样改?

WideCharToMultiByte(CP_ACP,0,strInput,strInput.GetLength(),p,len,NULL,NULL);

采用这种方式时,strInput结束符不会被转换到p中去,因为strInput.GetLength()不包括结束符

WideCharToMultiByte(CP_ACP,0,strInput,-1,p,len,NULL,NULL);

采用这种方式时,strInput结束符不会被转换到p中去,因为len长度不够放结束符

综上原因,把上面提到的2处参数改为“2、修改方法”里面的那样,就可以去掉末尾的乱码了


以上代码本人亲测

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen Roson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值