1
をintに、私は次のコードでint
にQByteArray
を変換しようとしています:主な機能には次にQByteArrayは変換
int byteArrayToint(const QByteArray &ba, QDataStream::ByteOrder byteOrder)
{
int val = 0;
QDataStream stream(ba);
stream.setByteOrder(byteOrder);
stream >> val;
return val;
}
:
....
QByteArray ba;
ba[0]=0x20;
ba[1]=0x17;
for(int i(0); i < ba.size(); i++)
qInfo() << QString("0x%1").arg((int)ba.at(i), 2, 16);
qInfo() << "date =" << byteArrayToint(ba, QDataStream::BigEndian);
...
、出力は次のとおりです。
"0x20"
"0x17"
date = 0
私はQByteArray( "こんにちは")の代わりに前のものを使用する場合は、t彼は結果を期待した:
"0x48"
"0x65"
"0x6c"
"0x6c"
"0x6f"
date = 1214606444
私はここまでの間違いを見つけることができません。 Qtクラスを使って同じ結果が得られない理由を理解したいと思います。
ありがとうございました。この行に
ストリーム 'status()'を読み込んだ後、ストリームを確認してください。私はあなたが "最後を過ぎて読む"状態になると思うでしょう。 – Mat
私はあなたのintが4バイトであり、QByteArrayに2バイトしか入れていないと思います! – xander
@Matあなたは正しいです。私はこの点に注意を払わなかった。 Endianessに従ってゼロを追加した後、期待どおりに動作します。ありがとう。 – Scab