データのバイト配列があり、クロスプラットフォームで一貫している必要があります。配列内のある場所を指すポインター、unsigned char* data
があり、4バイトを変数に読み込みたいとします。私はこれだけができると思います:
uint32_t my_int = *data;
ただし、この方法ではエンディアンが考慮されていないことに気付きました。たとえば、データがビッグエンディアンの場合、一貫して読み取るためにこれを行う必要がありますか?
uint32_t my_int = (data[0] << 3) + (data[1] << 2) + (data[2] << 1) + data[3];
同様に、このデータをで書き込むときに同じチェックを行う必要がありfwrite
ますか?たとえば、同じデータを次のコードでファイルに書き込んだ場合:
fwrite(&my_int, sizeof(my_int), 1, fh);
結果のデータには既知のエンディアンがありますか?それとも、アーキテクチャに依存するのでしょうか?もしそうなら、これらの読み取りと書き込みを行い、すべてのプラットフォームで特定のエンディアンを強制する最も簡単な方法は何ですか?