私はRawFile
クラスをC++で書いています(言語はここでは関係ありません)。しかし、私はそれがためにコンパイルされているものは何でもCPU全く汎用的なライブラリを維持したいと思います。今のところどのように一般的な方法(リトル/ビッグエンディアン)でRAWファイルを読み込むには?
、私は2つのバイトをスワップuint16_t swap16(uint16_t value)
機能を有し、符号なし整数、システムがエンディアン大きく、false
であればtrue
を返すbool is_bigendian()
機能を返し、そうでない場合には(私はPDP-11バイトを無視することを決定しましたそれは)発生した極めて低いようスキームを-ordering。最後に、私は読んでいる生ファイルのエンディアンを持っています。
ファイルとエンディアンのエンディアンの情報を考えれば、swap16()
機能を適用するかどうかはどのように決定できますか?
return (file_is_big_endian || system_is_big_endian) ? swap16(value) : value;
私は、次の表を想定:今のところ
が、私は次のテストを使用することを決めた私はこれが正しいかどうか、本当にわからない、sytem\rawfile | little-endian | big-endian |
--------------------------------------------
little-endian | No swap16() | swap16() |
big-endian | swap16() | swap16() |
をしかし、私はあるかもしれません何かが欠けている。
良い説明(またはより良いテスト)は大歓迎です!