Qt中Modbus協議數據十六進制,有無符號十進制轉換


前言

與傳感器通信,常使用串口通信,協議為Modbus協議,很多時候串口收發的數據是十六進制的,且十進制還包括有符號(正數),無符號(負數)。而我們處理的數據是10進制的,這就需要我們對16進制進行轉換,這篇博客主要是附上在Qt下的進制轉換代碼

 1. 16進制轉換成正整數10進制

QString qnum="EA6B";
int num = qnum.toInt(&ok,16);
qDebug()<<num<<endl; //輸出結果是60011

 2. 16進制轉有符號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; 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM