コンテンツへスキップ
uencoder

Endianness

エンディアンはメモリ上での複数バイト値の並び順である。ビッグエンディアンは最上位バイトを先頭に、リトルエンディアンは最下位バイトを先頭に格納する。

目的

複数バイトデータの格納と伝送を、CPU アーキテクチャをまたいで一貫させる方法を定める。

メカニズム

ビッグエンディアン:最上位バイトが最下位アドレスに置かれる(0x010203 は 01 02 03 と格納)。ネットワークプロトコルの慣例。リトルエンディアン:最下位バイトが最下位アドレスに置かれる(03 02 01 と格納)。x86/ARM が使用。UTF-16/32 は BOM か明示的なエンディアン宣言を必要とする。

ユースケース

  • ネットワークプロトコルのフィールド(ネットワークバイトオーダーはビッグエンディアン)
  • バイナリファイル形式(PNG はビッグ、ELF はリトルなど)
  • クロスプラットフォームのデータ直列化
  • 組込み・ドライバ開発

例

  • 入力
    0x01020304
    Output
    BE: 01 02 03 04 / LE: 04 03 02 01

    The same value in both byte orders

よくあるエラー

Sending host-order integers without network byte order conversion
Convert explicitly with htonl/ntohl or DataView

関連用語

関連ツール

References