QDatastreamを使用して、以下のようなリトルエンディアンARMマシン上のQByteArrayからquint32配列にデータを入力しています。
// Modify the header
QByteArray header = QByteArray::fromRawData((const char*)dataPtr,HEADER_SIZE);
QDataStream dataStream(header);
dataStream.setByteOrder(QDataStream::LittleEndian);
quint32 headerBuffer[NUMBER_HEADER_ENTRIES];
int bufferCnt = 0;
while ( !dataStream.atEnd() ) {
// Pop off a 32 bit int
quint32 temp;
dataStream >> temp;
// insert into buffer
headerBuffer[bufferCnt] = temp;
// Increment counter
bufferCnt++;
}
問題はバイトオーダーにあります。headerBuffer [113]の32ビットフィールドの最後の4ビットを取得する必要があるため、headerBufferのそのエントリを0xfとAND演算しようとしました。このフィールドに対してチェックする期待値は「3」です。ただし、このAND演算では、以下に示すように「a」が返されます。エントリが「0x1a13&0x000f」になるようにバイトを交換すると、「3」になります。私が見ているものと比較して、期待される値の他のいくつかの例を以下に見ることができます。そのため、QDataStreamのByteOrderをLittleEndianに設定していますが、それでも目的の結果が得られません。私は何が間違っているのですか?0x131aの代わりに0x1a13を取得するにはどうすればよいですか?ありがとう!
qDebug() << "ONE: " << QString("%1").arg(headerBuffer[0], 0, 16); // This prints: 494d0152 -- Should be: 4d495201
qDebug() << "TWO: " << QString("%1").arg(headerBuffer[1], 0, 16); // This prints: 5400 -- Should be: 54
qDebug() << "THREE: " << QString("%1").arg(headerBuffer[113] & 0x000f, 0, 16); // This prints: a -- Should be: 3 ( headerBuffer[113] is always 0x131a )
qDebug() << "FOUR: " << QString("%1").arg(0x1a13 & 0x000f, 0, 16); // This prints: 3 -- Should be: 3