Qt将UTF16十六进制字符串转换为QString

时间:2016-08-01 11:48:53

标签: c++ qt utf-16 qstring

我想将十六进制和utf16编解码器中的字符串转换为QString 例如我从这段代码中获得的东西:

QByteArray hex =  QByteArray::fromHex("0633064406270645");
// wrong text in str2 it should be equal to str1
QString str2 = QString::fromUtf16((char16_t*)hex.data()); 

但是当我尝试以下代码时,每件事都出错了,这样做的正确方法是什么。

group by

1 个答案:

答案 0 :(得分:4)

此代码有什么问题?

QByteArray hex =  QByteArray::fromHex("0633064406270645");
// wrong text in str2 it should be equal to str1
QString str2 = QString::fromUtf16((char16_t*)hex.data());
是Endian!这相当于L"\x3306\x4406\x2706\x4506"而不是L"\x0633\x0644\x0627\x0645"

因此,要解决此问题,您可以将BOM添加到字符串

QByteArray hex =  QByteArray::fromHex("FEFF0633064406270645");
QString str2 = QString::fromUtf16((char16_t*)hex.data());

没有测试但是应该解决问题。

替代解决方案是在单个UTF-16字符中翻转字节顺序(将其更改为小端)。

QByteArray hex =  QByteArray::fromHex("3306440627064506");
QString str2 = QString::fromUtf16((char16_t*)hex.data());