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

Qt:如何将硬件传入的转义序列转换为十进制字符串

问题解决:将硬件传入的ASCII控制字符转换为十进制字符串

问题本质

硬件发送的是1-12范围内的单字节十六进制值(如12对应0x0C),在Qt中接收后,这个字节会被解析为ASCII控制字符(0x0C对应八进制转义的\014,即换页符)。直接将其转为QString会保留控制字符本身,而非对应的十进制数值,这是你之前尝试各种字符串处理方法无效的原因。

正确解决方案

核心思路是:提取字节的数值本身,再将数值转换为十进制字符串,而非直接处理字符形式。

修改后的代码如下:

void device_reply(A *a, B *b)
{
    device *config = static_cast<device *>(b->deviceConfig);
    // 提取目标字节的数值(假设a->Data是QByteArray类型,且目标值在第一个字节)
    uint8_t raw_value = static_cast<uint8_t>(a->Data.at(0));
    // 将数值转为十进制字符串
    config->band = QString::number(raw_value);
}

为什么之前的方法无效

  • 访问QChar值:QChar存储的是字符的Unicode码点,0x0C的码点值确实是12,但直接转QString仍会显示控制字符,而非数值字符串。
  • 转uint再转回:若先将包含控制字符的QString转uint,会因无法解析控制字符导致转换失败或得到0,自然无法得到正确结果。
  • .trimmed()/.right(2):控制字符无前后空白,trimmed()不起作用;且该字符仅占1个字符串长度,right(2)无法提取有效内容。
  • 移除\0:\014是单个控制字符的八进制表示,并非字符串中包含\和0字符,因此移除\0操作完全不相关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:11:19