과 리틀 엔디안을 quint32 :Qt는 내가 다음과 같은 리틀 - 엔디안 ARM 시스템에 QByteArray에서 quint32 배열을 채울 QDatastream을 사용하고 QDataStream
// 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으로 설정하고 있지만 여전히 원하는 결과를 얻지 못하고있다. 내가 도대체 뭘 잘못하고있는 겁니까? 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
최고 -이 주셔서 감사합니다, 그것은 내 문제를 해결했다. – PhilBot