从 UTF-8 QString 中提取字节

Posted

技术标签:

【中文标题】从 UTF-8 QString 中提取字节【英文标题】:Extracting the bytes from a UTF-8 QString 【发布时间】:2011-11-22 15:21:53 【问题描述】:

我需要从包含 UTF-8 编码的 unicode 字符串的 QString 中提取所有位。

为了清楚起见,我需要将位存储在理想的字节 *(字节数组)或 char * 中。

我需要这样做的原因是因为我想对 UTF-8 字符串进行哈希处理,而哈希函数需要一个字节数组来存储要被哈希处理的字符串。

任何帮助,将不胜感激。

我只想从 QString 中提取比特流,因为它存储在 QString 中并将其转储到一个字节 *.因此,理想情况下,一旦我有了这个 byte * 等价物,我应该能够创建一个新的 QString 并使用这个 char * 在 QString 的构造函数中初始化它,它应该是一个正确的 UTF-8 QString。

【问题讨论】:

【参考方案1】:

您很可能正在寻找您从QString.toUtf8() 获得的QByteArray

http://doc.qt.io/qt-5/qstring.html#toUtf8

可以从 QByteArray 重新创建 QString(但请务必使用 QString.fromUtf8,因为采用 QByteArray 的 QString 的构造函数假定它是 ASCII 格式)。

您可以从 QByteArray 获得对 char* 的 const(或非 const)访问...

http://doc.qt.io/qt-5/qbytearray.html#data

...但请注意,只要您对 MD4、MD5 或 SHA-1 满意,Qt 就内置了对 QByteArray 的加密哈希的支持:

http://doc.qt.io/qt-5/qcryptographichash.html

【讨论】:

谢谢!抱歉,Jon Skeet 首先发布了相同的信息,所以我不得不给他答案。 实际上不...您不必给第一个回答者任何优先级。第一个回答者获得更多赞成票有一种自然的偏见,但接受的答案应该是最适合您目的的答案。如果您已经接受了一个答案,您甚至可以更改您接受的答案,稍后会有更好的答案。一定要避免被称为“西部最快的枪”的元数据问题:meta.stackexchange.com/q/19533/141442

以上是关于从 UTF-8 QString 中提取字节的主要内容,如果未能解决你的问题,请参考以下文章

QString与std::string的相互转换

PYQT 字符操作

Qt Qstring与c++标准string 的转化

[qt]qstring和string中文支持转换问题

System::String 到 QString

string与QString之间的转换(两种方法:fromStdString直接转换,或者fromLocal8Bit(cstr.c_str())