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

7
我有一个名为 blow 的 QByteArray。
QByteArray ba;
ba[0] = 0x01;
ba[1] = 0x10;
ba[2] = 0x00;
ba[3] = 0x07;

我真的不知道如何将这个QByteArray转换成一个结果字符串,其中包含 "01100007",我会在这个字符串上使用QRegExp进行模式匹配吗?


1
你应该赢得本周的用户名。说真的,除此之外,请接受Hyde的旧答案。 - Rethunk
2个回答

20
首先,QByteArray 不包含 "十六进制值" ,它包含字节(正如它的名称所示)。只有将数字打印为文本时,它才能是 "十六进制"。
你的代码应该是:
```html

首先,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()来转换大小写。


QByteArray ba_as_hex_string 是不是应该改成 QString ba_as_hex_string - Kingsley
1
@Kingsley 不是的,toHex返回一个8位US ASCII字符串。最后一段讨论了如何转换为QString。 - hyde

-1

QString有以下构造函数:

构造函数 QString(const QByteArray &ba)

但请注意,在C++中,八进制数以0开头,因此您的一些值是十进制的,一些是八进制的,没有一个是十六进制的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接