エンディアン

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

エンディアン (endian) とは、多バイトデータ(即ち基本情報記憶単位を超えるデータ)をメモリ上に配置する方式の種類のこと。エンディアンネス (endianness)、バイトオーダ (byte order) ともいう。

目次

概要

例えば16進数で 0x1234ABCD という4バイトのデータを、データの上位バイトからメモリに「12 34 AB CD」と並べる方式をビッグエンディアン (big endian)、データの下位バイトから「CD AB 34 12」と並べる方式をリトルエンディアン (little endian) という。 その他に「34 12 CD AB」あるいは「AB CD 12 34」のように並べる方式もあり、ミドルエンディアン(middle endian)、あるいはDECPDP-11で使われていたことからPDPエンディアンなどと呼ばれるが、現在ではほとんど見られない。

ビッグエンディアンは人間にとって直観的にわかりやすいという利点があり、一方リトルエンディアンはコンピュータにとって処理しやすい(多倍長加算の起点は最下位バイトであることなど)という利点がある。

IBM系のメインフレーム/汎用機、SunSPARCMotorolaMC68000等は「ビッグエンディアン」を採用し、インテルx86系などは「リトルエンディアン」を採用している。ARMアーキテクチャCPUTransmeta社のCrusoeHewlett-Packard社のPA-RISCPowerPCなど、エンディアンを切り替えられるバイエンディアン (bi-endian) のものも存在する。

互換性・移植性

エンディアンの相違は、単一あるいは同種のシステムに閉じた運用をする限りでは通常は問題にならないが、以下のような場合に問題になることがある。

TCP/IPネットワークでは、エンディアンの異なるコンピュータ間での通信を可能とするため、パケットなどに含まれる多バイトデータはビッグエンディアンに統一することと決められている。これをネットワークバイトオーダという。これに対し、それぞれのコンピュータ上でのエンディアンのことをホストバイトオーダという。

画像や音声などのバイナリファイルにおいても、互換性を確保するため、エンディアンが規定されている例が多い。

Unicodeにおいても、構成要素が多バイトとなるエンコーディング(主にUTF-16)では、エンディアンが問題となる。そのため、バイトオーダーマーク (BOM) と呼ばれる特殊なコード (U+FEFF) が予約されており、データの先頭にこれを付与することで、データを受け取る側がエンディアンを判別できるようになっている。BOMがない場合には、ビッグエンディアンだと決められている(→ UTF-16)。

ただし、復号側が以上のルールでエンディアンを判別する狭義のUTF-16とは別に、エンディアンを事前に一方に決定しているUTF-16BEとUTF-16LEが存在する。Windows上の文書における「Unicodeテキスト」は、BOMがない場合、UTF-16LE(リトルエンディアン)である。

語源

ビッグエンディアンリトルエンディアンという単語は、ジョナサン・スウィフトの風刺小説『ガリヴァー旅行記』の中のエピソードに由来する。ガリバー旅行記の第1部「小人国」では、卵を丸い方(大きい方)の端から割る人々 (Big Endians) と尖った方(小さい方)の端から割る人々 (Little Endians) との対立が描かれている。

関連項目

外部リンク

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net