KDOC 562: エンディアンを勘違いしていた

この文書のステータス

  • 作成
    • 2026-05-14 貴島
  • レビュー
    • 2026-05-14 貴島

概要

エンディアン(バイトオーダ)は複数バイトのデータをどの順序で書き込むかの話であって、1バイト内のビット順は同じである。1バイト内のビット順もエンディアンで変わると誤って理解していた。

  • CPU が整数 0x3042 をメモリに書く
    • x86(LE): 42 30
    • SPARC(BE): 30 42
  • CPUが3つの独立したバイト 0xE3, 0x81, 0x82 をメモリに書いた場合
    • 常に同じ

UTF-8は1~4バイトで1文字を表すが、バイト列として順序が固定されているので、BOM(バイトオーダマーク)は必要ない。

UTF-8の仕様はバイト単位で独立に定義している。3バイトをまとめた24ビット整数ではなく、1バイト目は〜、2バイト目は〜、というように定義されている。なのでエンディアンの影響は受けない。

Wikipediaの説明にもこうある。

UTF-8(ユーティーエフはち、ユーティーエフエイト)はISO/IEC 10646 (UCS) とUnicodeで使える 8ビット符号単位 (1–4バイトの可変長)の文字符号化形式および文字符号化スキーム[1]。 UTF-8 - Wikipedia

比較対象として、UTF-16では符号単位が16ビットである。なのでエンディアンの影響を受け、BOMがある。

UTF-16では、1文字が、16ビットの符号単位が1つまたは2つで符号化される。 UTF-16 - Wikipedia

関連

  • 追加調査: UTF-N はそういう意味なのか調べる
  • 類推: ほかにCPU以外にエンディアンが問題になる分野があるか調べる