使用十六进制数据 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"
QSerialPort
class中有函数qint64 QIODevice::write(const QByteArray &byteArray)
。
我使用 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"
QSerialPort
class中有函数qint64 QIODevice::write(const QByteArray &byteArray)
。