QByteArray 转为 int 详细说明

QByteArray 转为 int 详细说明

QByteArray有提供toInt()函数将 QbyteArray中的数据转为int类型。文章中涉及到的int类型都是4个字节。
这里写图片描述

toInt()用法:

一、QByteArray保存的是字符串,直接调用 toInt() 就可以了。需要注意的是不能超出int类型的大小范围,不然会转换失败。
  1. 保存的是十进制的数
    bool ok;
    QByteArray arr("12345");
    qDebug() << arr.toInt(&ok, 10);
    
    QByteArray arr1("-12345");
    qDebug() << arr1.toInt(&ok, 10);
    
    输出:
    12345
    -12345
    
    如果超出了int的范围:
    bool ok = false;
    QByteArray arr("123451111111111111");
    qDebug() << arr.toInt(&ok, 10) << ok;
    
    输出:
    0 false
    
  2. 保存的是十六进制的数:
    bool ok;
    QByteArray arr("ABCDEF");
    qDebug() << arr.toInt(&ok, 16);
    
    输出:
    11259375
    
    当然不能超过7FFFFFFF,否则会转换失败:
    bool ok = false;
    QByteArray arr("80000000");
    qDebug() << arr.toInt(&ok, 16) << ok;
    
    输出:
    0 false
    
二、QByteArray保存的是数,需要先调用toHex() 再调用 toInt(),这种方法也不能超出int范围。但是这种方法只能正确转换16进制的数。
bool ok;
QByteArray arr;
arr[0] = 0xAB;
arr[1] = 0xCD;
arr[2] = 0xEF;
qDebug() << arr.toHex().toInt(&ok, 16);

输出:

11259375
三、自定义方法

这种方法比较灵活。

enum Endian
{
	LittileEndian,
	BigEndian
};

int byteAraryToInt(QByteArray arr,  Endian endian = BigEndian)
{
	if (arr.size() < 4) 
		return 0;

	int res = 0;

	// 小端模式
	if (endian == LittileEndian)
	{
		res = arr.at(0) & 0x000000FF;
		res |= (arr.at(1) << 8) & 0x0000FF00;
		res |= (arr.at(2) << 16) & 0x00FF0000;
		res |= (arr.at(3) << 24) & 0xFF000000;
	}

	// 大端模式
	else if (endian == BigEndian)
	{
		res = (arr.at(0) << 24) & 0xFF000000;
		res |= (arr.at(1) << 16) & 0x00FF0000;
		res |= arr.at(2) << 8 & 0x0000FF00;
		res |= arr.at(3) & 0x000000FF;
	}
	return res;
}

测试:

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

    QByteArray arr;
    arr[0] = 0x8F;
    arr[1] = 0xAB;
    arr[2] = 0xCD;
    arr[3] = 0xEF;

    qDebug() << "arr to int: " << bytesToInt(arr);

    return a.exec();
}

输出:

arr to int:  -1884566033
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值