多字节 宽字节 单字节


多字节:指使用多个字节(1-3)表示一个字符。比如gbk使用英文占一个字节,中文占2个,这个就是多字节了。utf-8是使用1-3个字节表示字符。还有big5等等。

宽字节:一般是固定使用2个字节表示一个字符,utf-16(一般就是指unicode)。

单字节编码:一个字节就表示一个字符,比如典型的ASCII码中的所有字符都是单字节编码的。

1、MultiByteToWideChar 多字节转宽字节

2、WideCharToMultiByte 宽字节转多字节

3、和utf8有关的字符转换,代码页CodePage=CP_UTF8。

4、代码页CodePage=CP_ACP,一般使用系统当前使用的代码页。比如在简体中文(中国等)区域下,CP_ACP表示gbk编码的936代码页。在繁体中文(台湾),CP_ACP表示big5编码的950代码页。

5、CodePage代码页一般填写的是多字节代码页。

 

在程序中,一般最好使用unicode字符集显示字符,Windows的内核就是用unicode编码的,unicode字符集包含了世上大多数字符。unicode在windows下的不同本地环境下都能是正常显示。

但是在使用字符串和其他程序进程(本地进程或者远端进程)进行交互时,最好使用utf8编码字符。

工作中遇到的问题:  在这里读到的条码是CString型的,在这里由宽字节转化成多字节是为什么?然后再转换成数字型

                        macstr=CodeInput.m_strMac;  //这是读取到的条码
  WideCharToMultiByte(CP_ACP,0,(CodeInput.m_strMac),-1,(LPSTR)MultiByte,MACLEN,NULL,NULL);//把条码由宽字节转换成多字节
strTest.Format(_T("%02x%02x%02x%02x%02x%02x"),MultiByte[0],MultiByte[1],MultiByte[2],MultiByte[3],MultiByte[4],MultiByte[5]);
ITestTools_Display(pTools,strTest.GetBuffer(0));
EffectByte[0]=6;
EffecLen=EffectByte[0]+1;
EffectByte[1]=ChangeByte(MultiByte[0])*16+ChangeByte(MultiByte[1]);
EffectByte[2]=ChangeByte(MultiByte[2])*16+ChangeByte(MultiByte[3]);
EffectByte[3]=ChangeByte(MultiByte[4])*16+ChangeByte(MultiByte[5]);
EffectByte[4]=ChangeByte(MultiByte[6])*16+ChangeByte(MultiByte[7]);
EffectByte[5]=ChangeByte(MultiByte[8])*16+ChangeByte(MultiByte[9]);
EffectByte[6]=ChangeByte(MultiByte[10])*16+ChangeByte(MultiByte[11]);
strTest.Format(_T("整理后的条码:%02x%02x%02x%02x%02x%02x"),EffectByte[1],EffectByte[2],EffectByte[3],EffectByte[4],EffectByte[5],EffectByte[6]);
ITestTools_Display(pTools,strTest.GetBuffer(0));
// memcpy(EffectByte,(LPCSTR)(CodeInput.m_strBarCode),MACLEN);
ret=TCP_Communicate_Model(pTools,&RecvData,BOARD_NO,CMD_SETGET_MAC_TEST,SUBCMD_ZERO,EffectByte,EffecLen);  //在这里发送给下位机


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值