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

如何将QByteArray转换为指定HEX格式的QString?

解决方案

你可以通过两种简单的方式实现这个需求:

方法一:利用QByteArray的toHex方法快速处理

QByteArray自带的toHex(char separator)方法可以生成带分隔符的十六进制字符串,再通过字符串拼接和替换就能得到目标格式:

QByteArray serial; 
serial.resize(4);
serial[0] = 0xA0;
serial[1] = 0x01;
serial[2] = 0x05;
serial[3] = 0xA6;

// 生成目标格式字符串
QString hexStr = "0x" + serial.toHex(' ').replace(" ", " 0x");
// 打印结果:"0xA0 0x01 0x05 0xA6"
qDebug() << hexStr;

原理说明:

  • serial.toHex(' ')会输出字符串 "A0 01 05 A6"
  • 先在开头拼接 "0x",再把每个空格替换为 " 0x",最终得到带0x前缀的分隔格式。

方法二:遍历字节手动格式化

如果需要更灵活的控制(比如调整大小写、分隔符),可以逐个遍历字节并格式化:

QByteArray serial; 
serial.resize(4);
serial[0] = 0xA0;
serial[1] = 0x01;
serial[2] = 0x05;
serial[3] = 0xA6;

QString hexStr;
for (char byteData : serial) {
    // 将char转为无符号字符,避免负数的符号扩展问题
    hexStr += QString("0x%1 ").arg(static_cast<unsigned char>(byteData), 2, 16, QChar('0')).toUpper();
}
// 移除末尾多余的空格
hexStr = hexStr.trimmed();
// 打印结果:"0xA0 0x01 0x05 0xA6"
qDebug() << hexStr;

原理说明:

  • arg(static_cast<unsigned char>(byteData), 2, 16, QChar('0')):将单个字节转为两位十六进制字符串,不足两位补0
  • .toUpper():确保十六进制字母为大写(如果需要小写可以换成.toLower())
  • 最后用trimmed()去掉拼接时产生的末尾空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:20:26