Phi*_*Bot 3 c++ qt endianness qbytearray
我正在使用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++;
}
Run Code Online (Sandbox Code Playgroud)
问题在于字节顺序.我需要在headerBuffer [113]中获取32位字段的最后4位,所以我尝试用headerf在headerBuffer中输入该条目.检查该字段的期望值是"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
Run Code Online (Sandbox Code Playgroud)
看起来字节顺序在字节数组中有点不寻常.也就是说它是用big-endian词组装的,但是用低端词序排列.
如果您494d0152使用LE格式,则数组中的字节序列为:
52 01 4d 49
Run Code Online (Sandbox Code Playgroud)
当你期待4d 49 52 01它清楚时,'低'字4d 49是按顺序排列的.同样的高词.
所以你可能会尝试修改你的代码:
QDataStream dataStream(header);
dataStream.setByteOrder(QDataStream::BigEndian);
...
quint16 low, high;
quint32 temp;
dataStream >> low >> high;
temp = (high << 32) | low;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6140 次 |
| 最近记录: |