【问题标题】:How can hex values of a QByteArray be shown without them being converted to ASCII characters如何显示 QByteArray 的十六进制值而不将它们转换为 ASCII 字符
【发布时间】:2019-09-23 10:46:10
【问题描述】:

我有一个从串口读取数据并将其存储在 QByteArray 中的短程序。当我使用 qDebug() 显示数组的内容时,一些十六进制值会按预期显示,例如。 0xB5 保持 0xB5,但其他的都更改为 ASCII,例如。 0x62 变成 b。

这是我用来读取数据并使用 qDebug 显示它的代码:

void MainWindow::readSerial()
{
    QByteArray serialData = port->readAll();
    qDebug() << "SerialData: " <<serialData;
}

程序输出以下内容:

串行数据:"\xB5""b\x0B\x01""0\x00:\x16Q\x1E

但我希望它输出如下内容:

串行数据:\xB5\62\x0B......

我的问题是:

  1. qDebug 是否自动将一些十六进制值转换为 ASCII

  2. 如果是这样,有没有办法阻止它这样做

  3. QByteArray 存储数据是否准确或可能问题出在 我存储数据的方式

感谢您的帮助。 问候

【问题讨论】:

    标签: c++ arrays qt hex qdebug


    【解决方案1】:

    使用QByteArray::toHex()

    void MainWindow::readSerial()
    {
        QByteArray serialData = port->readAll();
        qDebug() << "SerialData: " << serialData.toHex(':');
    }
    

    序列数据:B5:62:0B

    1) QDebug 始终将数据显示为可打印字符。

    2) 您可以使用QTextStream 运算符对输出进行一些操作。但在这种情况下它无济于事。冗长而复杂的答案是in the code(这是QDebug 最终打印QByteArray 的地方)。

    3) 是的,它完全按照给定的方式存储数据。

    【讨论】:

    • @Koos 不客气,感谢您的积极反馈! :) FWIW,我已为您编号的问题附加了答案。
    猜你喜欢
    • 2016-08-04
    • 2018-02-14
    • 2011-11-21
    • 2017-03-11
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    相关资源
    最近更新 更多