2016-08-01 8 views
0

私は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() | 

をしかし、私はあるかもしれません何かが欠けている。

良い説明(またはより良いテスト)は大歓迎です!

答えて

0

私は自分の質問に答える...

は実際に、私は私が(「rawモード」で)バイトごとのファイルのバイトを読んでいたことに気づきました。だから、システム自体がリトルエンディアンまたはビッグエンディアンであるという事実は、単に無関係です。あなただけのテストは単純である、あなたが読んでいるバイトのセットを並べ替え(またはしない)ために読むファイルの種類を考慮しなければならない...だから:ちょうど愚かな質問おそらく

​​

...

関連する問題