【发布时间】:2013-03-07 08:38:12
【问题描述】:
我正在使用 QDatastream 从 Little-Endian 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 进行与。检查此字段的预期值为“3”。但是,这个 AND 操作给了我“a”,如下所示。如果我交换字节以使条目为“0x1a13 & 0x000f”,那么我得到“3”。您可以在下面看到其他一些预期值的示例,而不是我所看到的。所以,我将 QDataStream 的 ByteOrder 设置为 LittleEndian,但仍然没有得到想要的结果。我究竟做错了什么?我怎样才能得到 0x1a13 而不是 0x131a?谢谢!
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
【问题讨论】:
标签: c++ qt endianness qbytearray