Looks like the byte order is a bit unusual in your byte array. I.e. it is packed in big-endian words but with low-endian word order.
If you are getting 494d0152
in LE form, the byte sequence in array is:
52 01 4d 49
When you are expecting 4d 49 52 01
it it clear, that the 'low' word is 4d 49
is in BE order. Same for high word.
So you might try to modify your code:
QDataStream dataStream(header);
dataStream.setByteOrder(QDataStream::BigEndian);
...
quint16 low, high;
quint32 temp;
dataStream >> low >> high;
temp = (high << 32) | low;