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

时间:2016-07-28 06:32:16

标签: c++ qt hex qbytearray

我使用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;

我认为输出应该是: testdata&#34; \ x04 \ 31 \ xD2 \ x01 \ xA1&#34;

但实际上它看起来像这样: testdata&#34; \ x04&#34;&#34; 1 \ xD2 \ x01 \ xA1&#34;

我尝试了其他方法直接在QBytearray中使用append编写我的十六进制数据。

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

为什么Programm只以错误的方式转换0x31,如何才能让它更好? 有没有更简单的方法在QBytearray中编写十六进制数据?

1 个答案:

答案 0 :(得分:0)

当您打印QByteArray时,它会尝试将所有字符转换为ASCII,但数值为0x31。在串行端口中,数据以二进制形式发送,因此字符“1”将作为0x31发送。要从QByteArray中查看hexa中的数据,您可以使用函数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" 

qint64 QIODevice::write(const QByteArray &byteArray)类中有一个函数QSerialPort