You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含十六进制值的QString转uint8_t异常求助:字母字符转结果为0

解决Qt中十六进制字符串转uint8_t遇字母返回0的问题

问题根源在于QString::toUInt()的默认解析规则:它默认以十进制处理字符串,当字符串包含十六进制专属字母(如"0b"中的'b')时,十进制无法识别该字符,导致转换失败并返回0。

两种可行解决方法:

方法1:指定十六进制基数调用toUInt()

修改转换代码,在toUInt()中传入第二个参数16,明确告知函数按十六进制规则解析:

speed = samp_buff[3].toUInt(nullptr, 16); // 第二个参数指定解析基数为16

该方法支持大小写十六进制字符("0b"或"0B"都能正确转换为数值11)。

方法2:跳过字符串转换,直接从QByteArray提取数值

如果你的data始终是单个字节(比如场景中的\x07、\x0B),完全不需要经过十六进制字符串中转,直接提取字节值更高效可靠:

if (!data.isEmpty()) {
    speed = static_cast<uint8_t>(data.at(0));
}

这种方式省去了字符串转换的额外开销,结果也更直接准确。

内容的提问来源于stack exchange,提问作者TGanesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:15:37