我使用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中编写十六进制数据?
答案 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
。