QByteArray 的十六进制值如何在不转换为 ASCII 字符的情况下显示

How can hex values of a QByteArray be shown without them being converted to ASCII characters

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

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

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

程序输出如下:

SerialData: "\xB5""b\x0B\x01""0\x00:\x16Q\x1E

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

SerialData: \xB5\x0B......

我的问题是:

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

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

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

感谢您的帮助。 此致

使用QByteArray::toHex().

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

SerialData: B5:62:0B

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

2) 您可以使用 QTextStream operators. It will not help in this case though. Long and complicated answer is in the code 稍微操纵输出(这是 QDebug 最终结束 QByteArray 打印的地方)。

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