debug——QByteArray与int之间的转化

  • QByteArray从名字上看是字节数组,但它里面实际上是以字符数组的形式存储数据的。
QByteArray a;
a[0] = 0xff;
a[1] = 0xff;
a[2] = 0xa1;
a[3] = 0x89;
qDebug() << a.size();
qDebug() << a;
  • 我们看到a中存储的是字节型数据,大小为4
    在这里插入图片描述
QByteArray b = a.toHex();
qDebug() << b.size();
qDebug() << b;
  • 将a转化为16进制后,大小竟然为8了,此时每个数都是按ASCII字符存储的。
    在这里插入图片描述
  • 下面我想把0xffffa189这个补码表示的数转化为原码,发现这两种转换方式都转换失败???????
  • 仔细想了想发现转换失败是有道理的,int是4字节的数,现在把一个8字节b按照ASCII表示的数转换为int,肯定超出了int的取值范围。那a为什么错呢?a明明是4字节的补码。这一点我也没想明白?
int  d = a.toInt(&ok,16);
int d1 = b.toInt(&ok,16);
qDebug() << d << "  " << d1;

在这里插入图片描述

  • 按照下面c2的方法能够实现补码到原码之间的转换。a的转换失败了,b转换成unsigned int 后输出,结果是无符号的32位数。用第三种方法,先将b转换成无符号数4294943113,这个数很大,符号位是1,但我们记为无符号数。然后我们把它赋给有符号的c2,这个时候转化就是正确的了。
  • 也不知道为什么a为负值时都没法转化,先这样用着吧。
bool ok;
unsigned int  c = a.toUInt(&ok,16);
unsigned int c1 = b.toUInt(&ok,16);
int c2 = b.toUInt(&ok,16);
qDebug() << c << "  " << c1 << "  " << c2;

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值