MSCOMM二进制模式读取内容(中英混合)
来源:互联网 发布:mac 中文字体 ttf 编辑:程序博客网 时间:2024/05/20 12:25
中文会被处理成2个字节,需要自己合并起来。
从串口收到的字节是GBK2312编码类型
例如:中 编码为 :D6D0
收到两个字节后,需要做强制转换才能将编码转为中文
但是强制转换前,需将两个字节调转一下顺序,因为发来的第一个字节是高位字节,第二个字节是低位字节,即收到的是AB,
如果直接合并后转换的话,得不到原本意义的中文,这是因为将编码强制转换成字符串时,低位是低字节,高位是高字节
例如 UINT类型 4字节, 将其强制转为char型,一个char占一个字节.一个4字节的UINT类型会被处理成一个4字节char型。因为UINT类型初始化为0(因为字符串数组末尾需要加空字符结尾),所以在这个4字节数组下得到一个中文字符
var = m_comSearial.get_Input();
safeArray = var;len = safeArray.GetOneDimSize();
UINT nTrail = 0;
UINT nCode = 0;
for (long k=0;k<len;k++)
{
safeArray.GetElement(&k,rxdata+k);
BYTE bt = *(BYTE*)(rxdata+k);
if (nTrail == 0 && _ismbblead(bt))
{
nTrail = bt;
continue;
}
else if(nTrail > 0 && _ismbbtrail(bt))
{
nCode = bt;
nCode = nCode << 8;
nCode+=nTrail;
nTrail = 0;
char *p = (char*)&nCode;
int nNumber = MultiByteToWideChar(CP_ACP,0,p,-1,NULL,0);
WCHAR *psz = new WCHAR[nNumber];
MultiByteToWideChar(CP_ACP,0,p,-1,psz,nNumber);
strTemp+=psz;
delete []psz;
}
else
{
strTemp.Format(_T("%c"),bt);
}
nCode = 0;
m_strrecv+=strTemp;
strTemp.Empty();
}
阅读全文
0 0
- MSCOMM二进制模式读取内容(中英混合)
- 二进制读取文件内容[C#]
- powershell 快速读取二进制大文件内容
- JAVA中读取文件(二进制,字符)内容的方法总结
- 读取中英混合的文本文件-ANSI编码
- 读取Excel中内容
- 读取excel中内容
- fortran 中字符串数字混合读取
- VS2010中配置MSCOMM
- asp读取word 文档内容转换为二进制数据流
- 读取gif二进制内容用magick++来解析
- C#中读取EXCEL内容
- 从txt中读取内容
- 从Excel中读取内容
- 读取properties文件中内容
- 从文件中读取内容
- 【excel】读取excel 中内容
- 读取内存地址中内容。
- 《剑指offer》翻转单词顺序列
- 【bzoj1098】[POI2007]办公楼biu
- SPOJ SUBST1 New Distinct Substrings(不同的子串个数)
- 自定义函数使用方法 py3
- caffe学习之convert_imageset:图片格式转lmdb/leveld格式
- MSCOMM二进制模式读取内容(中英混合)
- 魔法宝石(类似dp 杭电排位赛-2)
- list_head 双向循环链表的结构
- Call to undefined function openssl_encrypt(),安装laravel报错问题
- 简谈JS的原型链和作用域链
- SPOJ 1043 Can you answer these queries I (超强线段树)
- 什么叫区块链分叉?
- Android 第三方初始化不适合放在SplashActivity
- matlab工具箱分类