0

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

谢谢你的帮助。问候

4

1 回答 1

1

使用QByteArray::toHex().

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

序列数据:B5:62:0B

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

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

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

于 2019-09-23T11:05:32.583 回答