将QByteArray十六进制值分开以分隔int

时间:2017-12-07 07:05:15

标签: c++ qt parsing

如何将"\"中这些QByteArray个分隔的HEX值解析为8个单独的int?

QByteArray mainArray = "\xFF\xFF\x01\x04\x01\x0B\x03\xEC";
int num1;
int num2;
int num3;
...

1 个答案:

答案 0 :(得分:0)

\x escape sequence表示字符串文字和字符文字中的十六进制值。 \x后面的两个十六进制数字将被解析为单个字节。例如:

QByteArray foo1 = "\x46\x6f\x6f";
QByteArray foo2 = "Foo";

Q_ASSERT(foo1 == foo2); // 'foo1' and 'foo2' are equal

如果您希望访问mainArray中以十六进制表示的值,只需使用QByteArray::atsubscript operator,如下所示:

QByteArray mainArray = "\xFF\xFF\x01\x04\x01\x0B\x03\xEC";
int num1 = mainArray[0]; // 0xFF
int num2 = mainArray[1]; // 0xFF
int num3 = mainArray[2]; // 0x01
// ...

要注意的一点是,QByteArray的值类型为char,这是一种签名类型,因此大多数系统上的\xFF将为-1 255。要解决上述问题,可以采用以下解决方案:

QByteArray mainArray = "\xFF\xFF\x01\x04\x01\x0B\x03\xEC";
int num1 = 0xff & mainArray[0];
int num2 = 0xff & mainArray[1];
int num3 = 0xff & mainArray[2];
// ...