Knowledge:ビッグエンディアンとリトルエンディアン

posted on 2005年7月12日 19:44 投稿者 Elfaria

要は、メモリの扱い方の違いですかね。

たとえば、

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00008000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00008010: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 0E 0F

みたいなデータがあったとします。(ベースアドレスとかは適当ですよ)

たとえば、0x00008000からの4バイトを抽出すると 00 01 02 03 ですね。

これが、x86系アーキテクチャで使われるリトルエンディアンの扱いだと、
データは 0x03020100 というように扱われます。

逆に、0xAABBCCDD というデータをメモリの0x00008020番地からの4バイトに格納すると、

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00008020: DD CC BB AA 00 00 00 00 00 00 00 00 00 00 00 00

のように格納されます。(例によってデータとかは適当ですよ)

Motorola系で扱われるビッグエンディアンの扱いだと、逆に上記例の0x00008000からの4バイトは、
0x00010203 というように扱われます。

逆に、0xAABBCCDD というデータをビッグエンディアンで0x00008020番地からの4バイトに格納すると、

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00008020: AA BB CC DD 00 00 00 00 00 00 00 00 00 00 00 00

というように格納されます。

ちなみに、プレイステーション(PS2含む)はリトルエンディアンです。
999を格納したい場合は、 0x03E7ですが、これは、
E7 03
のように格納されます。

ついでに、PSは16ビット、PS2は32ビット機ですね。一度に扱える範囲が違うんですね。たしか。

Manual.Keywords.TrackBack :: e-Words - ビッグエンディアン
Manual.Keywords.TrackBack :: e-Words - リトルエンディアン

コメント