ヘッダーを読み込もうとしています。構造は次のとおりです。
struct header
{
uint32 offset;
char identifier[4];
uint32 unknown;
};
memcpy を介してメモリのコピーを読み取ると、オフセットを正しく (通常は大きな数値で) 出力できます。
バイト配列で組み込み関数を使用する場合、ファイル全体を読み取り、次を使用して最初の 4 バイトを取得します。
QByteArray offset = data.left(4);
次に、正しくコピーされていることを確認しました。
私の問題は、これらのバイトを適切なデータ型に変換するときです。私が試してみました:
qDebug() << "Offset1:" << offset.toUShort();
qDebug() << "Offset2:" << offset;
qDebug() << "Offset3:" << offset.toHex();
qDebug() << "Offset4:" << offset.toInt();
qDebug() << "Offset5:" << offset.toLong();
qDebug() << "Offset6:" << offset.toUInt();
qDebug() << "Offset7:" << offset.toULong();
qDebug() << "Offset8:" << offset.toULongLong();
qDebug() << "Offset9:" << offset.toULong();
それらのどれも正しい値を出力しません。一方、memcpy だけを使用する場合:
qDebug() << "Offset:" << header.offset;
私は正しい値を取得します。バイトから uint32 への変換で何が欠けていますか?
エンディアンと関係がありますか?