QByteArray at 和十六进制数的比较

QByteArray array;

查看帮助文档可以知道 array.at(i) 返回的类型为char 类型

char QByteArray::at(int i) const

Returns the character at index position i in the byte array.

i must be a valid index position in the byte array (i.e., 0 <= i < size()).

See also operator[]().
char的取值范围是-128~127

因此在使用array.at(i)过程中应该注意,判断是否和某个十六制作数是否相当时可以在十六进制前面加个强制转换(char)

即 if(array.at(i) ==(char)0x 0F)

switch(array.at(i)){

.

case (char)0x 0F:

break;

.

}

这个和十六进制数比较经常使用到。

 

另外可以参考这篇文章: 关于QByteArray的>127的数字错误问题

https://blog.csdn.net/fgddragon/article/details/80200081?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在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); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值