Qt quint32 Little-Endianness with QDataStream
Qt quint32 Little-Endianness with QDataStream
我使用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位,所以我试图用0xf和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
看起来字节顺序在字节数组中有点不寻常。也就是说,它是由大端序的单词组成的,但词序是低端序的。
如果您以LE形式获得494d0152
,则数组中的字节序列为:
52 01 4d 49
当你期待4d 49 52 01
时,很明显,"低"字是4d 49
,是按BE顺序排列的。高字也一样。
所以你可以试着修改你的代码:
QDataStream dataStream(header);
dataStream.setByteOrder(QDataStream::BigEndian);
...
quint16 low, high;
quint32 temp;
dataStream >> low >> high;
temp = (high << 32) | low;
相关文章:
- Problems with std::cin.fail()
- 如何知道QDataStream不能反序列化某些内容
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- Qt with WinAPI MouseProc
- [[maybe_unused]] with structured_binding?
- Issue with WriteProcessMemory
- 如何使用 QDatastream 通过 QTcpSocket 发送 QSqlQueryModel?
- OpenCV RTP-Stream with FFMPEG
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- std::adjacent_difference with std::chrono time_point
- QDataStream 读取和写入的字节数比 QFile::length() 报告要多
- DLL Made with CMake 使程序崩溃
- QtCreator with C 库中的链接器问题
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- specialized std::default_delete with QQmlComponent
- Qt quint32 Little-Endianness with QDataStream