2017-11-29 10 views
1

をintに、私は次のコードでintQByteArrayを変換しようとしています:主な機能には次に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クラスを使って同じ結果が得られない理由を理解したいと思います。

ありがとうございました。この行に

+1

ストリーム 'status()'を読み込んだ後、ストリームを確認してください。私はあなたが "最後を過ぎて読む"状態になると思うでしょう。 – Mat

+1

私はあなたのintが4バイトであり、QByteArrayに2バイトしか入れていないと思います! – xander

+0

@Matあなたは正しいです。私はこの点に注意を払わなかった。 Endianessに従ってゼロを追加した後、期待どおりに動作します。ありがとう。 – Scab

答えて

2

stream >> val; 

は変数valのにストリームからsizeof(int)バイトyou'reading。

sizeof(int)が4であるとすれば、少なくとも4バイトのサイズのバイト配列は何らかのint値を返すことができます(残りのバイトは無視されます)。