笔记——QByteArray与有符号整型(int)之间的相互转换

关于10进制转换为16进制有符号转换方法:

十六进制转换为有符号的10进制数(-128-127)
第一位做为符号,0为正数,1为负数。
对正数,后7位的值即为数值。
对负数,128减后7位表示的数即为负号后的值。

1110 1100(EC)为负数,后7位的值为6c,即616+12=108,128-108=20,此数为-20
1111 1111(FF)为负数,后7位的值为7f,即7
16+15=127,128-127=1,数为-1
1100 1110(CE)为负数,后7位的值为4e,即416+14=78,128-78=50,此数为-50
1100 1111(CF)为负数,后7位的值为4F,即4
16+15=79,128-79=49,此数为-49

有符号的10进制数(-128-127)转为16进制数

如果是正数,第一位为0
如果是负数,第一位为1
对整数,值转为16进制即可
对负数,128减负数后面的值,转为16进制,与0x80做或运算,即为要求值

-49,负号后面的值是49,128-49=79,79转为16进制为0x4f,0x4f+0x80=cf

一,int转QByteArray

通过QByteArray::number方法进行转换(转换为4位16进制):

    int numer = -5;
    QByteArray arry2 = QByteArray::number(numer,16);  //这里16指转换为16进制
    qDebug()<<arry2;     //"fffffffb"

二,QByteArray转int

如果是一位的16进制可以直接转换:

QByteArray arr;
arr[0] = 0xfb;
int data =(int) arr[0];
qDebug()<<"data:"<<data;    //-5

如果是多位,需要自己进行转换,这里为两位:

 QByteArray number;
     number[0] = 0xfe;
     number[1] = 0xcb;
     int num = MainWindow::SignedHex2Int(number);
     qDebug()<<num;   //-309
int MainWindow::SignedHex2Int(QByteArray array){
       QString qnum =array.toHex().data();
       int num;
       bool ok;
        num = qnum.toInt(&ok,16);
        if(!(qnum.at(0)>='0'&&qnum.at(0)<='7')){//非正数
            num = num & 0x7FFF;       //清除符号位
            num=32768-num;                   //反码
            num = num * -1;                //符号位
        }
      return num;
}
  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QByteArray类是Qt框架中提供的一个用于处理字节数组的类。如果想将一个QByteArray对象转换int类型,可以使用QByteArray类自带的toInt()方法。例如,可以使用以下代码将一个QByteArray对象转换int类型: QByteArray byteArray = {0x12, 0x34, 0x56, 0x78}; int value = byteArray.toInt(nullptr, 16); 在这个例子中,我们首先创建了一个包含四个字节的QByteArray对象byteArray。然后,使用toInt()方法将byteArray转换int类型的数值,并将结果赋值给变量value。在toInt()方法的参数中,我们传递了一个nullptr和16。nullptr表示不需要返回转换过程中遇到的非数字字符,而16表示使用十六进制进行转换。 除了使用toInt()方法,还可以使用QByteArray类提供的其他方法来实现int类型与QByteArray之间转换。例如,可以使用reinterpret_cast将int类型转换为对应的字节数组,然后通过QByteArray的构造函数创建一个新的QByteArray对象。以下是一个示例代码: int value = 123456; QByteArray byteArray(reinterpret_cast<const char*>(&value), sizeof(value)); 在这个例子中,我们首先定义了一个int类型的变量value,并将其赋值为123456。然后,使用reinterpret_cast将value的地址转换为const char*类型的指针,并指定其大小为sizeof(value)。最后,通过QByteArray的构造函数将转换后的字节数组创建为一个新的QByteArray对象byteArray。 总结起来,将QByteArray转换int类型可以使用QByteArray自带的toInt()方法,而将int类型转换成QByteArray可以使用reinterpret_cast和QByteArray的构造函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值