使用十六进制数据 0x31 将 char 转换为 bytearray

Convert char to bytearray with hex-data 0x31

我使用 QT Creator(MinGW 5.3.0 C++,Windows)并想编写一些串行连接的十六进制数据。 我找到了一种方法,但出了点问题。只有一个十六进制数据他转换错了。

希望我的代码能帮助理解。

static const unsigned char mytestUC[] = {0x04,0x31,0xD2,0x01, 0xA1};
enum { NBYTES = sizeof(mytestUC) };
const char *mytest = reinterpret_cast<const char*>(mytestUC);
QByteArray testdata = QByteArray::fromRawData(mytest, sizeof(mytest)+1);
qDebug()<<"testdata "<<testdata;

我认为输出应该是: 测试数据“\x04\xD2\x01\xA1”

但实际上它是这样的: 测试数据“\x04”“1\xD2\x01\xA1”

我尝试了一些其他方法,通过追加将我的十六进制数据直接写入 QBytearray。

testdata .append((char) 0x04);
testdata .append((char) 0x31);
testdata .append((char) 0xD2);
testdata .append((char) 0x01);
testdata .append((char) 0xA1);

为什么 Programm 仅以错误的方式转换 0x31,我该如何改进它? 有没有更简单的方法在 QBytearray 中写入十六进制数据?

当您打印 QByteArray 时,它会尝试将所有字符转换为 ASCII,但数值为 0x31。在串行端口中,数据以二进制形式发送,因此字符“1”将作为 0x31 发送。要从 QByteArray 中查看十六进制数据,您可以使用函数 toHex(),示例:

QByteArray ba;
ba.append((char) 0x31);
ba.append((char) 0x32);
ba.append((char) 0x33);
ba.append((char) 0x34);

qDebug() << "char: " << ba;
qDebug() << "hexa: " << ba.toHex();

输出将是:

char:  "1234" 
hexa:  "31323334" 

QSerialPortclass中有函数qint64 QIODevice::write(const QByteArray &byteArray)