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;
posted @   手写不期而遇  阅读(1298)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示