2016-08-01 7 views
1

にUTF16進文字列を変換しますQtの私は、このコードから実現もののように、たとえばQStringの に進とUTF16コーデックに文字列を変換したいQStringの

QString str1 = QString::fromWCharArray(L"\x0633\x0644\x0627\x0645"); // what I want 

が、私は次のコードにすべてのことをしようとすると、これを行う正しい方法は間違っていました。

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

「QString str2(hex);」? – wasthishelpful

+0

str1をUTF16 QBytearrayに変換し、toHexを使用して、0633を取得した場合は比較してください。 – hyde

+0

@wasthishelpfulいいえ、まったく動作しません。 – AMCoded

答えて

4

このコードで何が問題になっていますか?

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

エンディアンは!これは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()); 
+0

ああ、QString :: fromUtf16のドキュメントからこの行を逃す私はこの関数はバイトオーダーマーク(BOM)をチェックします。それが欠けているなら、ホストバイトオーダーが仮定されます。おかげで時間を節約できます。 – AMCoded

関連する問題