Qt中如何将十六进制字符串“00 FF CD 00“转为数值类型

1、将字母转为大写并检查字符串中是否含有不合法的字符(0~9 A~F)

static QRegularExpression hexRegex("^[0-9A-F]+$"); // 定义为静态成员
hexRegex.match(toQHexStr).hasMatch()               // 检查字符串是否只包含十六进制字符

2、根据字符串的大小来定义数据类型

例如:"00 FF CD 00" 占四个字节,对应 int 类型;

int value = 0;
// 移除空格并转换为大写以符合QHex的要求
QString toQHexStr = hexStr.trimmed().toUpper().replace(" ", "");
value = toQHexStr.toInt(&success, 16);

注意:如果字符串为"FF FF FF FF" value转化出来的值本应该为-1;但是toInt接口会报错,它只能转化0~7F FF FF FF之间的正数;(int类型可表示的最大正数值为7F FF FF FF)

3、数据在计算机中都是以补码的方式进行存储的,因此采用uint进行转化,最后将uint数值转为int类型,这样就可以得到一个负数了!

#include  <QRegularExpression>


int controlThread::HexStringToValue(const QString &hexStr)
{
    uint value = 0;
    static QRegularExpression hexRegex("^[0-9A-F]+$"); // 定义为静态成员
    // 移除空格并转换为大写以符合QHex的要求
    QString toQHexStr = hexStr.trimmed().toUpper().replace(" ", "");
    //qDebug() << "HexStringToValue string:" << toQHexStr;
    // 检查字符串是否只包含十六进制字符
    if (hexRegex.match(toQHexStr).hasMatch())
    {
        bool success = true;
        value = toQHexStr.toUInt(&success, 16);         //十六进制字符串转换只能转为正数
        if (!success)
        {
            qDebug() << "HexStringToValue failed for string:" << toQHexStr;
            return 0;
        }
    }
    qDebug() << "HexStringToValue uint:" << value;
    return (int)value;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值