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

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

本文关键字:情况下 字符 显示 QByteArray 十六进制 ASCII 转换      更新时间:2023-10-16

我有一个简短的程序,它从串行端口读取数据并将其存储在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 是否准确存储数据,或者问题是否在 我存储数据的方式

感谢您的帮助。 问候

使用QByteArray::toHex()

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

串行数据: B5:62:0B

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

2( 您可以使用QTextStream运算符来操纵输出。不过,在这种情况下无济于事。冗长而复杂的答案在代码中(这是QDebug最终用于QByteArray打印的地方(。

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

相关文章: