如何将QByteArray转换为十六进制字符串?

时间:2016-04-13 15:24:50

标签: qt qt5

我有打击QByteArray。

QByteArray ba;
ba[0] = 0x01;
ba[1] = 0x10;
ba[2] = 0x00;
ba[3] = 0x07;

我真的不知道如何将此QByteArray转换为具有“ 01100007 ”的结果字符串,我将使用QRegExp对此字符串进行模式匹配?

2 个答案:

答案 0 :(得分:10)

首先,QByteArray不包含“十六进制值”,它包含字节(顾名思义)。只有在以文本形式打印时,数字才能为“十六进制”。

您的代码应为:

QByteArray ba(4, 0); // array length 4, filled with 0
ba[0] = 0x01;
ba[1] = 0x10;
ba[2] = 0x00;
ba[3] = 0x07;

无论如何,要将QByteArray转换为十六进制字符串,您很幸运:只需使用QByteArray::toHex()方法!

QByteArray ba_as_hex_string = ba.toHex();

请注意,它返回8位文本,但您可以将其分配给QString,而无需担心编码,因为它是纯ASCII。如果您想要十六进制数字中的大写 A-F 而不是默认的 a-f ,则可以使用QByteArray::toUpper()转换大小写。

答案 1 :(得分:-1)

QString有以下构造函数:

构造函数QString(const QByteArray& ba)

但是请注意,在c ++中,八进制数字的前面是0,所以你的一些值是十分的,有些是八进制的,没有一个是十六进制的。