1. ホーム
  2. c++

[解決済み] QByteArrayからQStringへの変換

2022-02-05 01:04:56

質問

で困っています。 QByteArrayQString .

あるファイルを読み込んで、その情報を QByteArray . ファイルはユニコードなので、以下のような内容です。 t\0 e\0 s\0 t\0 \0 \0

この値を指定した値と比較しようとしていますが、デバッガで見るとユニコード文字列ではないので、失敗しています。

コードで全て説明します。

QByteArray Data; //contains unicode string "t\0 e\0 s\0 t\0 \0 \0"
QString myValue = "test"; //value to compare.
if(Data.contains(myValue))
    //do some stuff.
else
    //do other stuff.

デバッガで、変数 Data は、値 "t\0 e\0 s\0 t\0 \0 \0"myValue は値 "test" . どうすれば直るのでしょうか?

どのように解決するのですか?

を使用することができます。 QTextCodec を使用してバイト配列から文字列に変換します。

QString DataAsString = QTextCodec::codecForMib(1015)->toUnicode(Data);

(1015はUTF-16、1014はUTF-16LE、1013はUTF-16BE、106はUTF-8)

あなたの例から、文字列 "test" は次のようにエンコードされます。 "t\0 e\0 s\0 t\0 \0 \0" を使用すると、すべてのアスキー文字の後に \0 -バイト、あるいはすべてのASCII文字が2バイトでエンコードされています。このようにアスキー文字がエンコードされるユニコードエンコーディングは UTF-16 か UCS-2 (UTF-16 の制限バージョン) だけなので、あなたの場合は 1015 mib が必要です (あなたのローカルエンディアンが入力エンディアンと同じであると仮定します)。