QByteArray带0x十六进制显示

以文件为例:

   QByteArray data  = file.readAll();
   QString ret;
   for (int i = 0; i < data.count(); ++i) {
       ret.append( tr("0x%1,").arg ((quint8)data.at(i),2,16,QLatin1Char('0')).toUpper());
    }
    qDebug()<<ret;

如果不要大写就把.toUpper()去掉
效果:
在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Qt中,如果你有一个`QByteArray`(字节数组)存储了十六进制数据,并想要将其转换为符号的浮点数(如`float`),你需要先解析十六进制字符串,然后根据其长度和前缀(如果是单精度或双精度)来转换。 例如,对于单精度(32位)浮点数,你可以按照这样的步骤操作: 1. 将十六进制字符串分为两个部分,前4个字符代表小数点前的部分,后8个字符(如果存在的话)代表小数点后的部分。 2. 分别将这两个部分转换成对应的无符号整数。 3. 对于小数部分,通常需要乘以16的相应次方(比如`0x1p+X`格式中的`X`),因为浮点数的小数部分是以指数形式表示的。 4. 合并这两个整数,将有符号整数转换为`float`,注意正负符号取决于十六进制的第一个字符(对于小端模式的系统,这通常是第一位)。 如果涉及到双精度(64位)浮点数,处理过程类似,只是需要处理更多的字节。 以下是一个简单的示例,假设你已经有了一个名为`hexString`的`QByteArray`: ```cpp #include <QString> #include <QByteArray> #include <QLatin1Char> #include <QDataStream> // ... (假设已经读取了十六进制字符串到hexString) // 拆分十六进制字符串 QString intPart = hexString.left(8); QString fracPart = hexString.mid(8); // 转换为无符号整数 quint32 uintIntPart = qint32(intPart.toHex().toUpper()); quint32 uintFracPart = qint32(fracPart.remove('p').toHex().toUpper()); // 计算指数和整数部分 int exponent = QByteArray{fracPart}.toInt(); quint64 floatNum = quint64(uintIntPart) << exponent; // 如果是双精度,这里会需要处理另外8位 if (hexString.length() > 16) { // ... } // 将数值转换为符号float bool isNegative = hexString.at(0) == QLatin1Char('-'); float signedFloat = static_cast<float>(isNegative ? -floatNum : floatNum); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值