【发布时间】:2016-12-02 09:23:50
【问题描述】:
我使用 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\31\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);
为什么程序以错误的方式只转换 0x31,我怎样才能使它变得更好? 有没有更简单的方法可以在 QBytearray 中写入十六进制数据?
【问题讨论】:
-
不知道mytestUC已经是字节数组了吗?
-
...那个 0x31 是 '1'?
-
不,我以前不知道。我尝试将 mytestUC 与 Serial->write 一起使用,但它不起作用,因为“write”需要一个 const char 而我需要一个 unsigned char。一些十六进制数据会更大,例如 0x7F。 Jap 0x31 是 1 但我需要它以十六进制发送。
标签: c++ qt hex qbytearray