串口数据的格式问题

本文讨论了在串口通信中遇到的数据格式问题,涉及板子与上位机之间的数据交换。上位机使用MFC,需要将接收到的16进制数据转换为ASCII码处理后再回传。内容提到了如何处理接收到的两个字节数据以及ASCII码,以及在使用CString和char类型转换时遇到的0x00截断问题,并给出了转换方法。
摘要由CSDN通过智能技术生成

串口数据的格式问题

工作中有需求是将串口回传的数据给上位机,处理完之后再回传给板子.上位机是用MFC来做的.收到的数据需要转换成16进制数在上位机处理过后,再转换为ascii码回传.由于程序原先代码的串口发送函数接收的参数是CString类型的,我处理的数据需要是char类型的.这就涉及到进制转换的问题:

板子传给上位机

假如我想要的数据是0xcc,串口回传的数据打印在屏幕上的是CC.转换成ascii码就是0x43,0x43.

这里就有2个问题啦:
1.本来我要的是一个字节的数据,但是却给了我两个字节
2.我要的是原本的数据,但是却给了我ascii码

上位机传给板子

这个和上面的问题是相反的关系:
1.假如我向板子写了个 'DD',我的本意是希望板子收到0xdd,即一个字节的数据.但实际情况是板子收到'D'和
'D'两个字节.
2.收到的这两个字节还不是0x0d和0xd,而是0x44和0x44

CString 是MFC提供给我们的一个类.char是一个基本的数据类型,它们之间是可以转换的.
假设char * test = “hello world”,想转换成CString类对象的话只需要CString str(test);然后通过串口丢出去就好了.

有一个小插曲.像上面那种转换的话当char * 里面的含有0x00(不是在字符串末尾) 这样的数据,CString就是自动截断输出了,即如下图所示,CString打印出来的可能就是”A”了.解决的办法是在CString构造的时候手动 指定长度,即CString str(test,3).如果是char数组的话也可以是sizeof(test),但是不要用strlen,它也是根据’\0’来判断字符串借宿的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值