QT串口通信怎么发送十六进制字符串?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT串口通信怎么发送十六进制字符串?相关的知识,希望对你有一定的参考价值。
龚建伟老师编写的串口调试助手里面有个十六进制的发送和接收功能,不知道有没有哪位尝试过在QT里面实现同样的功能?就是对于类似“02e3a2f5d6”的字符串作为一个十六进制字符串发送,而不是作为普通的字符串发送,我看了他写的源代码,里面有一个字符串转换函数,这个函数可以直接拿过来用,但是使用qextserialport类进行发送的时候,出现了一点小问题,就是当字符的ASCII码值大于127时,会将最高位省略,比如发送"f5",收到的字符转换为十六进制后变成"75",如果你们有兴趣,可以帮我看看,十分感谢!!
类似“02e3a2f5d6”的字符串,可以用字符拆分的方式进行分解,可以分解到QByteArray对象中给你一个拆分类似 "12 35 AB 25 CD"字符串的函数,自己再稍加改动就可以用了
QByteArray HEXStringToArr(QString hexstr)
QByteArray qrst;
hexstr=hexstr.trimmed();
hexstr=hexstr.replace("",",");
QStringList sl=hexstr.split(",");
foreach(QString s,sl)
if(!s.isEmpty())
qrst.append((char)s.toInt(0,16)&0xFF);
return qrst;
参考技术A 楼主我搞过这个东西.
而且已经解决16机制问题.如果你要代码可以贴邮箱上来.
不过我的程序只可以在window平台上运行.
那我帮不了你了...............
关于QT串口编程与单片机通信的问题,单片机为STM32
Qt串口程序是用的网上别人写好的类,win_qextserialport,程序能收也能发。但是我单片机的程序是if data==0x11,我就控制蜂鸣器亮,else,我就给QT程序发个0x40作为回应,结果QT都是收到40,我怎么弄就能让单片机程序就能收到0x11,QT发送数据,我是这样写的,this->mycom->write(ui->lineEditSendMsg->text.toAscii().toHex()); 我把.toHex()去掉也没有用
参考技术A 因为你获取到的是字符,转换成ascii后1是31,他再次帮你转换成了ascii 33,31所以这里不能用toHex,可以尝试toNumber十进制
实际上QT使用串口的时候,直接open串口设备,write发送,事件触发接收更简单。
单片机就没什么好说的了 参考技术B 看来你是软硬件通吃啊 上位机也自己写啊
我是这样想的
1,你先确定下波特率上位机和单片机是否一致
2,能否把单片机收到的串口数据通过其他方式显示出来 或者直接用keil或iar仿真看你收到的是不是0x11
如果不是那就从qt发送部分找问题追问
收发是没有问题的,我上午整了整,能做到控制了,就是把上面的.toHex()去掉。就是以Asc马发出数据,比如我发1,单片机收到的就是0x31(1的ASC马,16进制),我打印出来也是这样,所以我能控制了,但是我觉得这样不是太好,还有加了.toHex()后不知道是什么意思,我发1,打印出来的是,33,31,我发2,就打印33,32
追答恩,看来没问题了
你可以用qt的打印功能调试你写的程序
以上是关于QT串口通信怎么发送十六进制字符串?的主要内容,如果未能解决你的问题,请参考以下文章