2017-08-07 12 views
2

バイナリ形式とアスキー形式で演奏する練習の一環として、整数49をCプログラムを使用してファイルに書きました。バイナリでは、その4バイト表現は、ASCIIでテキストエディタでの逆エンディアン

00000000 00000000 00000000 00110001

で、最初の3つのバイトは、(^@と表示)NULLバイトであり、最後のバイトは文字1あります。これをvimで開いたとき、3バイトのnullバイトが続くと予想され、次に1が続きました。代わりに、私はそれが逆のことを見た、すなわち、1に続いて3つのヌルバイトが続きます。それはなぜそうですか?

答えて

2

それは店がローからハイバイトという(すべてのx86はリトルエンディアンです)ご使用のプラットフォームはリトルエンディアンであると思われるので、49メモリ内ではなく、あなたが期待しているものの

00110001 00000000 00000000 00000000 

として格納されています。


、あなたがhtonl() functionを使用して(また、ネットワークバイトオーダーとして知られている)ビッグエンディアンを使用して、それを保存する必要が期待する形式で表示したい場合。

+0

整数をCコードで読み戻すと、メモリ内のエンディアンとレイアウトに関係なく、正しく読み込まれます。私は、テキストエディタがそれを読んだとき、メモリにレイアウトされたバイトを表示し、エンディアンを知らないと思います。 – jitihsk

+1

異なるエンディアンのマシンで整数を読み取ると、異なる結果が得られます。そのため、ネットワークバイトオーダーが定義されているため、アーキテクチャ間で相互運用可能です。 – Hauleth

関連する問題