Qt中Modbus协议数据十六进制,有无符号十进制转换
前言
与传感器通信,常使用串口通信,协议为Modbus协议,很多时候串口收发的数据是十六进制的,且十进制还包括有符号(正数),无符号(负数)。而我们处理的数据是10进制的,这就需要我们对16进制进行转换,这篇博客主要是附上在Qt下的进制转换代码
1. 16进制转换成正整数10进制
1 2 3 | QString qnum= "EA6B" ; int num = qnum.toInt(&ok,16); qDebug()<<num<<endl; //输出结果是60011 |
2. 16进制转有符号10进制
1 2 3 4 5 6 7 8 9 10 | QString qnum= "EA6B" ; int num = qnum.toInt(&ok,16); if (!(qnum.at(0)>= '0' &&qnum.at(0)<= '7' )){ num = num & 0x7FFF; //清除符号位 num = ~num; //反码 num = num & 0x7FFF; //清除左边多余位 num = num + 1; //加1 num = num*-1; //符号位 } qDebug()<<num<<endl; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧