美文网首页
QT学习笔记——十进制与十六进制转换

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

作者: Cyfeng | 来源:发表于2019-08-07 10:53 被阅读0次

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

    前言:两者转换一般用在串口通信的数据处理上,上位机接收到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;
    
    }
    

    输出:-665

    相关文章

      网友评论

          本文标题:QT学习笔记——十进制与十六进制转换

          本文链接:https://www.haomeiwen.com/subject/njnndctx.html