QT串口接收十六进制

前段时间写了个“QT串口发送十六进制”,为了对应,现在来个下部剧集。

我要接收的数据比较长,“01 03 24 01 19 …………00 D5 F6”中间省略一大截,为将这些数据接收到一个字符串中,参考QT论坛里的文章,总结如下:

QByteArray tmp; if(highCom->bytesAvailable() >= 41) { tmp = highCom->readAll(); QDataStream out(&tmp,QIODevice::ReadWrite); while(!out.atEnd()) { qint8 outChar = 0; out>>outChar; QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0')); strHex += str; } qDebug()<<strHex; }

没有贴出完整的函数,不过这部分就已经可以解决了。 strHex中就是存储的接收十六进制数据。

想要做什么处理,就根据实际情况来吧。

当然可以参考网址:http://www.qtcn.org/bbs/read-htm-tid-44071.html

那就在这里结束吧。

### Qt处理接收到的十六进制00值的方法 当使用Qt通过串口通信时,遇到接收十六进制`0x00`(即空字符)的情况,通常会发现这些字节未能正常显示或被忽略。为了确保能够正确处理并展示所有的数据,包括那些具有特殊意义的零值,建议采取以下措施: #### 设置正确的读取模式 对于串口类中的readyRead信号连接槽函数,在该槽内实现对传入数据流的有效解析。由于默认情况下QString可能无法很好地表示二进制序列特别是其中含有NULL终止符(`\0`)的情形,因此推荐直接操作QByteArray对象来保存原始字节数组。 ```cpp void SerialPortReader::readData() { QByteArray data = serial->readAll(); // 处理data... } ``` 此方式下,即使存在多个连续的`\x00`也不会影响程序逻辑[^1]。 #### 数据可视化 如果希望在界面上直观呈现所有接收到的内容,则需考虑如何将非可打印字符合理映射成可见形式。一种常见做法是在转换为字符串之前先遍历整个数组,把每一个不可见字符替换成特定标记如`.`或其他易于辨识符号;而对于正常的ASCII范围内的字母数字则保持不变。 ```cpp QString byteArrayToVisibleString(const QByteArray& bytes) { QString result; foreach (char ch, bytes) { if ((ch >= 32 && ch <= 126)) { // 可视化ASCII字符 result.append(ch); } else { result.append('.'); // 非可视化的占位符 } } return result; } // 或者更简洁的方式利用lambda表达式配合std::transform算法: #include<algorithm> QString byteArrayToVisibleStringLambda(const QByteArray& bytes){ QString visibleStr(bytes.size(), '.'); std::transform(bytes.begin(), bytes.end(), visibleStr.begin(), [](unsigned char c){return isprint(c)?c:'.';}); return visibleStr; } ``` 上述代码片段展示了两种不同的方法用于创建一个只包含可打印字符的新字符串实例,从而使得任何输入都能得到恰当的表现[^2]。 另外值得注意的是,针对某些应用场景而言,除了简单的替换外还可能存在其他需求比如记录实际数值以便后续分析等,这时可以根据具体业务场景灵活调整策略。 #### 编码设置 考虑到不同平台间编码差异可能导致的问题,务必确认应用程序内部以及外部接口所使用的字符集一致。例如,在Windows环境下开发时可以通过修改控制台输出代码页等方式避免可能出现的乱码现象[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值