QT学习笔记——十进制与十六进制转换

——带符号十进制与两字节十六进制之间的转换

前言:两者转换一般用在串口通信的数据处理上,上位机接收到QByteArray类型的数据,转成QString类型,然后进行字符串截取拼接,获取数据。因此,下文两字节十六进制的数据类型是QString。十进制各种数据类型转换相对简单。下文带符号十进制数据类型是整型。

QByteArray byte = serial->readAll();

QString qstr = byte.toHex();

例子:0xFD67 和 -665

1、带符号十进制 转 两字节十六进制

int main(int argc, char *argv[]){

    int num=-665;//正负皆可

    QString qnum= QString::number(num,16).right(4);//裁剪字符串前面多余的f

    std::cout<<qnum.toUpper().toStdString()<<std::endl;

    return 0;

}

输出:FD67

2、两字节十六进制 转 带符号十进制

int main(int argc, char *argv[]){

    int num;bool ok;

    QString qnum = "FD67";

    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;                //符号位

    }

    std::cout<<num<<std::endl;

    return 0;

}

 



作者:Cyfeng
链接:https://www.jianshu.com/p/938bd6393405
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
posted @ 2021-10-27 17:36  浅笑19  阅读(2313)  评论(0编辑  收藏  举报