2017-11-22 34 views
0

QByteArrayとStringがqtでどのように連携しているかを理解しようとしています。だから、メモリにQByteArrayを作成する以下のケースがあります。QStringからQByteArrayを取得する

QByteArray qba; 
quint8 version = 1; 
qba << version; 
quint8 type = 122; 
qba << type; 

qDebug() << qba.length() << " " << QString(qba); 

デバッグ文を印刷:だから

2 "\u0001z" 

、私は2バイトのデータを持っているし、文字列表現を抽出します。

ここで私がしたいことは、文字列表現(生のC++ char配列として私に与えられている)から始まり、QByteArray表現を作成することです。だから、次のように私は配列を作成します。

char msg[] = { '\\', 'u', '0', '0', '0', '1', 'z', '\0' }; 
QString testStr = QString::fromUtf8(msg); 
QByteArray testRaw = testStr.toUtf8(); 
qDebug() << testRaw.length() << " " << QString(testRaw); 

さて、これは印刷されます。

7 "\\u0001z" 

は、私は、このような文字配列から開始し、バイト配列表現を得ることができるかどうかはわかりませんよ。 I私はQString間のQt 5.9

+0

に変換されたことを注意あなたの編集の直後に答えてください。今あなたの質問は正確ではないことがわかります。なぜこの変換が必要ですか? –

+0

私はデータマトリックスイメージを解読するライブラリlibdmtxを使用しているので、この変換が必要です。デコーダは 'const char *'を返し、私は基本的にそれを解析するためにバイナリ表現を取得しようとしています。返される文字列はUTF-8であると推測していますが、わかりません。それらの文書は何も言いません。 現時点では、QByteArrayとconst char *の間で、エンコーディングを知っているので、私がどのように前後に行き来できるかを再現しようとしています。 – Luca

答えて

0

変換を使用しています、これは文字列のエンコーディングの問題であるかどうかわからないですが、私は関係なく、私は(fromLatin1fromUtf16など)をしようとした文字列メソッドたのこのバイナリ表現を再作成することができませんでした

QByteArrayはエンコードに依存しています! QString(qba)は、データがUTF-8でエンコードされていることを前提としています。QString documentationを参照してください。あなたが持っている他の方向では

ように

アンス、その逆の静的メソッドもあります。


qDebug() << anyString; は文字通りデータを印刷しませんが、開発者のための形で、それはそれは引用符で囲まれている理由で、印刷不能文字は「\のU0001」私が投稿した


QByteArray qba; 
quint8 version = 1; 
qba << version; 
quint8 type = 122; 
qba << type; 

// character '\1' is not printable, so qDebug do a developer friendly conversion 
qDebug() << qba.length() << " " << QString(qba); 

// to revert conversion, you code should look like this: 
QString convnerted(qba); 
QByteArray reverted = convnerted.toUtf8(); 

Q_ASSERT(reverted == qba); 
+0

答えをありがとう。ですから、QString(qba)は私にutf-8表現を与えました。だから、私はメモリ内で同じことをやってみました(コードの2番目の部分)。なぜ私はQByteArrayを回復できませんでしたか?私は 'QString testStr = QString :: fromUtf8(msg);という行が私には同じ表現を与えるだろうと思った。 – Luca

+0

Qtのどのバージョン? Qt4はこの問題では異なる動作をします。 –

+0

はい、変換されたQByteArrayの長さが2対7ではありません。したがって、文字列表現の何かが間違っています。 – Luca

関連する問題