【问题标题】:Convert char to bytearray with hex-data 0x31使用十六进制数据 0x31 将 char 转换为 bytearray
【发布时间】: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


【解决方案1】:

当您打印 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" 

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

【讨论】:

    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 2011-11-27
    • 2011-05-25
    • 2015-06-04
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2012-07-23
    相关资源
    最近更新 更多