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

QByteArray转十六进制、二进制、字符表格遇转义序列问题求助

解决QByteArray转十六进制、二进制、字符表格的简便方法

先修正你的基础代码问题

你提供的示例代码里,QString::number(0, 16)是固定输出0,根本没遍历QByteArray里的元素,这是核心错误。正确的做法是取出QByteArray的每个字节来处理。

简便实现方法

Qt本身提供了很多工具函数,不用手动逐个判断ASCII范围:

1. 逐字节生成十六进制、二进制和字符表示

#include <QByteArray>
#include <QString>
#include <iostream>

void printByteArrayTable(const QByteArray& data) {
    std::cout << "偏移\t十六进制\t二进制\t字符" << std::endl;
    std::cout << "-----------------------------------------" << std::endl;

    for (int i = 0; i < data.size(); ++i) {
        unsigned char byte = static_cast<unsigned char>(data[i]);
        
        // 生成两位补零的十六进制字符串
        QString hexStr = QString::asprintf("0x%02X", byte);
        // 生成八位补零的二进制字符串
        QString binStr = QString::number(byte, 2).rightJustified(8, '0');
        // 处理字符显示:可打印字符直接输出,不可打印用'.'代替
        QChar ch = static_cast<char>(byte);
        QString charStr = ch.isPrint() ? ch : QString('.');

        // 输出表格行,每8个字节换行分隔
        std::cout << QString("%1\t%2\t%3\t%4").arg(i, 4).arg(hexStr).arg(binStr).arg(charStr).toStdString() << std::endl;
        
        if ((i + 1) % 8 == 0 && i != data.size() - 1) {
            std::cout << "-----------------------------------------" << std::endl;
        }
    }
}

// 使用示例
int main() {
    QByteArray data = "Hello World";
    printByteArrayTable(data);
    return 0;
}

2. 关键工具函数说明

  • QString::asprintf("0x%02X", byte):直接格式化输出两位十六进制,自动补前导0,不管是空格(0x20)还是其他字符都能正确转换。
  • QString::number(byte, 2).rightJustified(8, '0'):把字节转成二进制字符串后,自动补前导0到8位,保证格式整齐。
  • ch.isPrint():Qt的QChar自带判断是否为可打印字符的方法,直接替代手动判断00-32的繁琐操作,不可打印字符统一用'.'显示。

3. 批量转十六进制的快捷方法

如果只需要把整个QByteArray转成连续的十六进制字符串,直接用QByteArray自带的toHex()方法:

QByteArray data = "Hello World";
QString hexTotal = data.toHex(' '); // 用空格分隔每个字节,输出示例:"48 65 6c 6c 6f 20 57 6f 72 6c 64"
std::cout << hexTotal.toStdString() << std::endl;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:15:22