
コンピューティングにおいて、エンディアンとは、ワードデータ型内のバイトがデータ通信媒体を介して送信される順序、またはコンピュータメモリ内でアドレス指定される順序のことで、バイトの重要度のみを、出現の早さと比較して考慮します。エンディアンは主にビッグエンディアン(BE)またはリトルエンディアン(LE )で表されます。
コンピュータは、さまざまなサイズのバイナリビットのグループに情報を格納します。各グループにはアドレスと呼ばれる番号が割り当てられ、コンピュータはこのアドレスを使用してデータにアクセスします。最新のコンピュータのほとんどでは、アドレスを持つ最小のデータグループは8ビット長で、バイトと呼ばれます。より大きなグループは2バイト以上で構成されます。たとえば、ワードは32ビットまたは64ビットで構成されることがよくあります。
コンピュータがより大きなグループ内の個々のバイトに番号を付ける方法は主に 2 つあり、両端から開始します。ビッグエンディアン システムでは、ワードの最上位バイトが最小のメモリ アドレスに、最下位バイトが最大のアドレスに格納されます。一方、リトルエンディアン システムでは、最下位バイトが最小のアドレスに格納されます。[ 1 ] [ 2 ] [ 3 ]この 2 つのうち、ビッグエンディアンは、数字をバイトと比較し、アドレスが左から右に増加すると仮定すると、英語で数字の桁が左から右に書かれる方法に近く、最上位桁が最初になります。
どちらのエンディアンもデジタル電子工学で広く使用されています。新しい設計のエンディアンの初期選択は多くの場合任意ですが、後の技術改訂や更新では、後方互換性を維持するために既存のエンディアンが引き継がれます。ビッグエンディアンは、インターネットプロトコルスイートなどのネットワークプロトコルで主流の順序であり、ネットワーク順序と呼ばれ、最上位バイトが最初に送信されます。逆に、リトルエンディアンは、プロセッサアーキテクチャ(x86、ほとんどのARM実装、基本RISC-V実装)とその関連メモリで主流の順序です。ファイル形式はどちらの順序も使用できます。一部の形式では、両方の順序を混合して使用したり、ファイル全体で使用されている順序を示すインジケータが含まれています。[ 4 ]
バイエンディアンは、データフェッチやストア、あるいは命令フェッチで切り替え可能なエンディアンネスを備えた多数のコンピュータアーキテクチャでサポートされている機能です。その他の順序は、一般的にミドルエンディアンまたはミックスエンディアンと呼ばれます。 [ 5 ] [ 6 ] [ 7 ] [ 8 ]

エンディアンは主にビッグエンディアン(BE)またはリトルエンディアン(LE)として表現され、これらの用語はダニー・コーエンが1980年に発表したインターネット実験ノートで導入したものです。 [ 9 ]コーエンは、ジョナサン・スウィフトの風刺小説『ガリバー旅行記』の不条理なエピソードからこれらの用語を借用しました。架空の国リリパットでは、ゆで卵の殻を正しく割る方法についての終わりのない議論で学者たちが激しく分裂しています。殻の大きい方の端を割るべきだと主張する人々はビッグエンディアンであり、反対側の端を割る反対派はリトルエンディアンです。[ 10 ] [ 11 ]
コンピュータのメモリは、記憶セル(アドレス指定可能な最小単位)のシーケンスで構成されます。バイトアドレッシングをサポートするマシンでは、これらの単位はバイトと呼ばれます。各バイトは、ハードウェアとソフトウェアの両方で、メモリ アドレスによって識別され、アクセスされます。メモリ内のバイトの総数がnの場合、アドレスは 0 からn − 1 まで列挙されます。
コンピュータ プログラムでは、1 バイトに格納できるデータよりも多くのデータで構成されるデータ構造またはフィールドがよく使用されます。この記事の文脈では、その型を任意に複雑にすることはできません。フィールドは連続するバイト列で構成され、少なくとも潜在的には1 つのハードウェア命令で操作できる単純なデータ値を表します。ほとんどのシステムでは、マルチ バイトの単純なデータ値のアドレスは、その最初のバイト (アドレスが最も低いバイト) のアドレスです。この規則には例外があります。たとえば、IBM 1401の Add 命令は、可変長フィールドをその下位 (アドレスが最も高い) 位置にアドレスし、その長さは上位 (アドレスが最も低い) 位置に設定されたワード マークによって定義されます。加算などの操作を実行すると、プロセッサは 2 つのフィールドの上位アドレスの下位位置から開始し、上位位置まで処理を進めます。[ 12 ]
バイトがフィールドの一部であることのもう一つの重要な属性は、その重要性です。フィールドの各部分のこれらの属性は、コンピュータハードウェア、より正確には、コンピュータ命令の結果に貢献する低レベルアルゴリズムによってバイトがアクセスされる順序において重要な役割を果たします。
位取り記数法(主に2進数、まれに10進数)は、コンピュータによる整数データの表現、特に操作の主要な方法です。純粋な形式では、これは中程度のサイズの非負整数、たとえばCデータ型に対して有効ですunsigned。このような数体系では、全体の数に寄与する桁の値は、1桁としての値だけでなく、完全な数の中でその桁が占める位置(その桁の有効性と呼ばれる)によっても決定されます。これらの位置は、主に2つの方法でメモリにマッピングできます。[ 13 ]
ビッグエンディアンとリトルエンディアンでは、末尾とは、最も低いメモリ アドレスでインデックス付けされた場所に、ビッグまたはリトルエンディアンの意味が書き込まれる端点のことです。
文字(テキスト)文字列を互いに比較する場合、例えばソートなどのメカニズムをサポートするために、非常に頻繁に辞書式比較が行われます。辞書式比較では、単一の位置要素(文字)が位置値も持ちます。辞書式比較はほぼあらゆる場面で行われ、電話帳のように最初の文字が最も高い順位になります。単一の命令でこれを実行できるマシンはほぼすべてビッグエンディアン、もしくは少なくとも混合エンディアンです。
テキストとして記述された整数は、テキストの方向に関係なく、常にメモリ内で最上位桁が最初に表現されます。これはビッグエンディアンに似ています。
メモリバイトを左から右へ順番に表示する場合(例えば、16進ダンプなど)、リトルエンディアン形式の整数は、右から左へ桁数が減少する。つまり、視覚的に見ると逆向きに表示され、直感に反する可能性がある。
この動作は、例えばFourCCや同様の技術で、文字を整数にパックしてメモリ内の特定の文字のシーケンスにする場合に発生します。たとえば、16 進ASCIIで格納された文字列「JOHN」を考えてみましょう。ビッグ エンディアンのマシンでは、値は左から右に表示され、結果を読み取るための正しい文字列の順序 (「JOH N」) と一致します。しかし、リトルエンディアンのマシンでは、「NHO J」と表示されます。ミドル エンディアンのマシンでは、さらに複雑になります。たとえば、PDP-11では、32 ビット浮動小数点数は、ビッグ エンディアンで 2 つの 16 ビットワード「JO」、「HN」として格納され、16 ビットワード内の文字はリトルエンディアンで格納されるため、「OJN H」となります。[ 14 ]
バイトスワッピングとは、バイトを並べ替えてエンディアンを変更することです。多くのコンパイラは、ネイティブプロセッサ命令( / )にコンパイルされる可能性のある組み込み関数を提供しています。例えば、などです。スワッピングのためのソフトウェアインターフェースには、次のようなものがあります。bswapmovbe__builtin_bswap32
winsock2.h。endian.h関数(BEおよびLE間、最大64ビット)。[ 16 ]OSByteOrder.hマクロ(BEおよびLE間、最大64ビット)。std::byteswapの関数。[ 17 ]一部のCPU命令セットは、エンディアンバイトスワッピングをネイティブにサポートしています。例えば、 bswap[ 18 ](x86 - 486以降、i960 - i960Jx以降[ 19 ])、rev[ 20 ](ARMv6以降)などです。
コンパイラによっては、バイトスワップ機能が組み込まれているものもあります。例えば、GNU FortranとIntel Fortran コンパイラCONVERTは、ファイルを開く際に非標準の指定子 (例: ) をサポートしています。[ 21 ] [ 22 ]他のコンパイラには、すべてのファイル IO 操作で変換をグローバルに有効にするコードを生成するオプションがあります。これにより、コードを変更することなく、エンディアンが逆のシステムでコードを再利用できます。OPEN(unit,CONVERT='BIG_ENDIAN',...)
ほとんどのシステムでは、マルチバイト値のアドレスは、その最初のバイト(アドレスが最も低いバイト)のアドレスです。このようなリトルエンディアンシステムでは、データ値が十分に小さい場合、異なるアドレスを使用せずに、同じ値を異なる長さでメモリから読み取ることができます(アライメントの制約が課されている場合でも)。たとえば、内容を持つ 32 ビットのメモリ位置は、 8 ビット(値 = 4A)、16 ビット(004A)、24 ビット(00004A)、または32 ビット4A 00 00 00(0000004A)のいずれかと同じアドレスで読み取ることができ、これらはすべて同じ数値を保持します。このリトルエンディアンの特性は、高水準プログラマによって直接使用されることはまれですが、コード最適化ツールやアセンブリ言語プログラマによって使用されることがあります。このような型変換コードはC++ では許可されていませんが、 C11 標準[ 23 ]では「実装定義」として許可されており、ハードウェアとやり取りするコードで一般的に使用されています[ 24 ]。[ 25 ]
位取り記数法における演算の中には、基本ステップの実行順序が自然または推奨される順序で定められているものがあります。この順序は、小規模なバイトアドレス指定可能なプロセッサやマイクロコントローラにおける演算性能に影響を与える可能性があります。しかし、高性能プロセッサは通常、マルチバイトのオペランドをメモリからフェッチするのにかかる時間は、シングルバイトのフェッチにかかる時間と同じであるため、ハードウェアの複雑さはバイト順序の影響を受けません。
加算、減算、乗算は最下位桁の位置から始まり、繰り上がりを次の上位桁に伝播します。ほとんどのシステムでは、マルチバイト値のアドレスは、その最初のバイト(アドレスが最も小さいバイト)のアドレスです。リトルエンディアン方式のマシンでは、この最初のバイトに最下位桁が含まれるため、これらの演算の実装はわずかに簡単になります。
比較と除算は最上位桁から始まり、桁上がりが発生した場合は下位桁に伝播します。固定長の数値(通常は1、2、4、8、16桁)の場合、これらの演算の実装はビッグエンディアン方式のマシンの方がわずかに簡単です。
ビッグエンディアンプロセッサ(例えば、IBM System/360とその後継機)の中には、長さの異なる文字列を辞書式比較するためのハードウェア命令が含まれているものがある。
代入文による通常のデータ転送は、原則としてプロセッサのエンディアンとは無関係である。
多くの歴史的および現存するプロセッサは、ビッグエンディアンのメモリ表現を、専ら、または設計オプションとして使用しています。IBM System/360 はビッグエンディアンのバイト順序を使用しており、後継機のSystem/370、ESA/390、およびz/Architectureも同様です。PDP -10 は、バイト指向命令にビッグエンディアンのアドレッシングを使用しています。IBM Series/1ミニコンピュータはビッグエンディアンのバイト順序を使用しています。Motorola 6800 / 6801、6809、および68000 シリーズのプロセッサはビッグエンディアン形式を使用しています。ビッグエンディアンのみを使用するアーキテクチャには、IBM z/Architecture とOpenRISCがあります。ただし、 PDP-11ミニコンピュータはリトルエンディアンのバイト順序を使用しており、後継機のVAXも同様です。
Datapoint 2200は、桁上がり伝播を容易にするためにリトルエンディアンを採用したシンプルなビットシリアルロジックを使用していました。IntelがDatapoint向けに8008マイクロプロセッサを開発した際、互換性のためにリトルエンディアンを採用しました。しかし、Intelは8008を期日までに納品できなかったため、Datapointは中規模集積回路(MSI)相当のプロセッサを使用しましたが、リトルエンディアンはMCS-48や8086 、そしてIA-32やx86-64プロセッサを含むx86の後継機など、ほとんどのIntel設計で維持されました。[ 26 ] [ 27 ] MOS Technology 6502ファミリー ( Western Design Center 65802および65C816を含む)、Zilog Z80 ( Z180およびeZ80を含む)、Altera Nios II、Atmel AVR、Andes Technology NDS32、Qualcomm Hexagon、その他多くのプロセッサおよびプロセッサファミリーもリトルエンディアンです。
Intel 8051は、他の Intel プロセッサとは異なり、LJMP および LCALL にはビッグエンディアン形式の 16 ビット アドレスを想定していますが、xCALL命令は戻りアドレスをリトルエンディアン形式でスタックに格納します。[ 28 ]
命令セットアーキテクチャの中には、データフェッチとストア、命令フェッチ、またはその両方でエンディアンを切り替えられる設定を備えているものがあります。このような命令セットアーキテクチャはバイエンディアンと呼ばれます。切り替え可能なエンディアンをサポートするアーキテクチャには、PowerPC / Power ISA、SPARC V9、ARMバージョン 3 以降、DEC Alpha、MIPS、Intel i860、PA-RISC、SuperH SH-4、IA-64、C-Sky、RISC-Vなどがあります。この機能により、ネットワークデバイスやソフトウェアのパフォーマンスが向上したり、ロジックが簡素化されたりします。ハードウェアに関して「バイエンディアン」という言葉を使う場合、マシンがどちらのエンディアン形式でもデータを計算または渡すことができる能力を意味します。
これらのアーキテクチャの多くは、ソフトウェアを介して特定のエンディアン形式をデフォルトとして切り替えることができます(通常はコンピュータの起動時に行われます)。ただし、一部のシステムでは、デフォルトのエンディアンはマザーボード上のハードウェアによって選択され、ソフトウェアで変更することはできません(たとえば、Cray T3E上でビッグエンディアンモードでのみ動作する Alpha など)。
IBM AIXとIBM i は、バイエンディアンの Power ISA 上でビッグエンディアン モードで動作します。Linuxは当初ビッグエンディアン モードで動作していましたが、2019 年までに IBM は Linux ソフトウェアを x86 から Power へ移植しやすくするために、Linux をリトルエンディアン モードに移行しました。[ 29 ] [ 30 ] SPARC には関連するリトルエンディアンの展開はありません。Oracle Solarisと Linux はどちらもバイエンディアンの SPARC システム上でビッグエンディアン モードで動作し、実際にはビッグエンディアンとみなすことができます。ARM、C-Sky、RISC-V には関連するビッグエンディアンの展開はなく、実際にはリトルエンディアンとみなすことができます。
バイエンディアンという用語は、主にプロセッサがデータアクセスをどのように処理するかを指します。特定のプロセッサでは、データアクセスが完全にバイエンディアンであっても、命令アクセス(命令ワードのフェッチ)は固定エンディアンを前提とする場合がありますが、これは常に当てはまるわけではなく、例えばIntelのIA-64ベースのItanium CPUでは両方の方式が許容されています。
名目上はバイエンディアンであるCPUの中には、エンディアンを完全に切り替えるためにマザーボードの支援を必要とするものがあります。例えば、リトルエンディアンモードの32ビットデスクトップ向けPowerPCプロセッサは、実行プログラムの観点からはリトルエンディアンとして動作しますが、I/Oデバイスにリトルエンディアンの視点が適用されるようにするには、マザーボードが8バイトレーンすべてにわたって64ビットのスワップを実行する必要があります。このような特殊なマザーボードハードウェアがない場合、デバイスドライバソフトウェアは不完全な変換を元に戻すために異なるアドレスに書き込み、通常のバイトスワップも実行する必要があります。
組み込み用途向けのPowerPCプロセッサの多くや、ほぼすべてのSPARCプロセッサなど、一部のCPUでは、ページごとにエンディアンを選択できる。
1990年代後半以降のSPARCプロセッサ(SPARC v9準拠プロセッサ)では、メモリへのロードまたはストアを行う個々の命令ごとにデータのエンディアンを選択できるようになっている。
ARMアーキテクチャは、 BE-8とBE-32と呼ばれる2つのビッグエンディアンモードをサポートしています。[ 31 ] ARMv5までのCPUは、BE-32またはワード不変モードのみをサポートしています。ここでは、自然にアラインされた32ビットアクセスはリトルエンディアンモードと同様に機能しますが、バイトまたは16ビットワードへのアクセスは対応するアドレスにリダイレクトされ、アラインされていないアクセスは許可されません。ARMv6では、BE-8またはバイト不変モードが導入されました。このモードでは、1バイトへのアクセスはリトルエンディアンモードと同様に機能しますが、16ビット、32ビット、または(ARMv8以降)64ビットワードにアクセスすると、データのバイトスワップが発生します。これにより、アラインされていないメモリアクセスと、32ビット以外のレジスタへのメモリマップドアクセスが簡素化されます。
多くのプロセッサには、レジスタ内のワードを逆エンディアンに変換する命令、つまり16ビット、32ビット、または64ビットのワード内のバイトの順序を入れ替える命令が備わっています。
最近の Intel x86 および x86-64 アーキテクチャの CPU には、メモリからビッグエンディアン形式のワードをフェッチするか、ビッグエンディアン形式でワードをメモリに書き込む MOVBE 命令 (第 4 世代以降の Intel Core) [ 32 ] があります。これらのプロセッサはそれ以外は完全にリトルエンディアンです。
また、場所によって異なるフォーマットを使用するデバイスもあります。例えば、テキサス・インスツルメンツのバッテリーゲージBQ27421は、レジスタにはリトルエンディアン形式を、ランダムアクセスメモリにはビッグエンディアン形式を使用しています。
SPARCは歴史的にバージョン9までビッグエンディアン方式を採用していましたが、バージョン9以降はバイエンディアン方式になりました。同様に、初期のIBM POWERプロセッサもビッグエンディアン方式でしたが、PowerPCおよびPower ISAの後継プロセッサは現在バイエンディアン方式です。ARMアーキテクチャはバージョン3まではリトルエンディアン方式でしたが、バージョン3以降はバイエンディアン方式になりました。
多くのプロセッサはすべての種類のデータ (整数、浮動小数点) にリトルエンディアン ストレージを使用していますが、浮動小数点数がビッグエンディアン形式で表現され、整数がリトルエンディアン形式で表現されるハードウェア アーキテクチャがいくつかあります。[ 33 ]倍精度浮動小数点数に混合エンディアン浮動小数点表現を持つARMプロセッサがあります。2 つの 32 ビット ワードはそれぞれリトルエンディアンで格納されますが、最上位ワードが先に格納されます。VAX 浮動小数点では、リトルエンディアンの16 ビット ワードがビッグエンディアンの順序で格納されます。ネットワーク標準表現のない浮動小数点フォーマットが多数存在するため、XDR標準では表現としてビッグエンディアンの IEEE 754 を使用しています。そのため、広く普及しているIEEE 754浮動小数点標準でエンディアンが指定されていないのは奇妙に思えるかもしれません。[ 34 ]理論的には、これは、あるマシンで書き込まれた標準 IEEE 浮動小数点データでも、別のマシンでは読み取れない可能性があることを意味します。しかし、最新の標準コンピュータ(IEEE 754を実装しているもの)では、浮動小数点数と整数のエンディアンは同じであると安全に想定できるため、データ型に関係なく変換は簡単です。ただし、特殊な浮動小数点フォーマットを使用する小型組み込みシステムの場合は、話は別です。
これまで検討してきた命令のほとんどは、操作コード内にオペランドのサイズ(長さ)を含んでいます。よく使用されるオペランドの長さは、1、2、4、8、または16バイトです。しかし、オペランドの長さを命令の別のフィールド、またはオペランド自体に、たとえばワードマークを使用して保持できるアーキテクチャもあります。このようなアプローチでは、最大256バイト以上のオペランド長を使用できます。このようなオペランドのデータ型は、文字列またはBCDです。このようなデータを1つの命令(たとえば、比較、加算)で操作できるマシンには、IBM 1401、1410、1620、System /360 、 System /370、ESA/390、およびz/Architectureがあり、これらはすべてビッグエンディアンです。
その他にも、ミドルエンディアンまたは混合エンディアンと呼ばれる様々な順序付けが可能である。
PDP -11は主に 16 ビット リトルエンディアン システムです。PDP-11/45、PDP-11/70、および一部の後継プロセッサのオプションの浮動小数点プロセッサで浮動小数点値と整数値を変換する命令は、16 ビットの半分が想定されるリトルエンディアンの順序と入れ替わった32 ビット倍精度整数 long値を格納します。UNIX Cコンパイラは、32 ビット long 整数に対して同じ形式を使用します。この順序はPDP エンディアンとして知られています。[ 35 ]
UNIX は、内部表現が異なるプラットフォーム向けに同じコードをコンパイルできる最初のシステムの 1 つです。変換された最初のプログラムの 1 つは を出力するはずでしたUnixが、Series/1 ではnUxi代わりに を出力しました。[ 36 ]
このエンディアンを解釈する方法の一つは、32ビット整数を2つのリトルエンディアン16ビットワードとして格納し、ワード順序をビッグエンディアンにする、というものです。
IA-32および互換プロセッサのセグメント記述子は、セグメントの32ビットベースアドレスをリトルエンディアン順で保持しますが、記述子の開始位置の相対位置2、3、4、7にある4つの非連続バイトに格納します。[ 37 ]
デジタルロジックを表現するために使用されるハードウェア記述言語(HDL)は、多くの場合、任意のエンディアンと任意の粒度をサポートしています。たとえば、SystemVerilogでは、ワードをリトルエンディアンまたはビッグエンディアンとして定義できます。
エンディアンが異なるコンピュータで作成されたファイルやファイルシステムを読み込む際には、エンディアンを認識することが重要です。
一方のエンディアンで作成されたFortranの順次非フォーマットファイルは、通常、もう一方のエンディアンを使用するシステムでは読み取ることができません。これは、Fortranでは通常、レコード(単一のFortran文によって書き込まれたデータとして定義される)が、データの前後にカウントフィールド(データのバイト数に等しい整数)が付加されたデータとして実装されるためです。このようなファイルを、もう一方のエンディアンのシステムでFortranを使用して読み取ろうとすると、カウントフィールドが正しくないため、実行時エラーが発生します。
Unicodeテキストは、オプションでバイトオーダーマーク(BOM)で開始して、ファイルまたはストリームのエンディアンを示すことができます。そのコードポイントは U+FEFF です。たとえば、 UTF-32では、ビッグエンディアンのファイルは で開始する必要があります。00 00 FE FFリトルエンディアンは で開始する必要がありますFF FE 00 00。
MATLAB の.matファイルや地形測量で使用される.bilデータ形式などのアプリケーションのバイナリ データ形式は、通常、エンディアンに依存しません。これは、データを常に固定のエンディアンで保存するか、エンディアンを示すスイッチをデータとともに渡すことによって実現されます。前者の例としては、Windows システムと Mac システム間で移植可能で常にリトルエンディアンであるバイナリXLS ファイル形式があり、ビッグ エンディアンの Motorola 68K または PowerPC プロセッサで実行される場合、Mac アプリケーションはロード時と保存時にバイトを入れ替える必要があります。[ 38 ]
TIFF画像ファイルは、2 番目の戦略の例であり、そのヘッダーは、内部のバイナリ整数のエンディアンをアプリケーションに指示します。ファイルが で始まる場合、MM整数はビッグ エンディアンで表現され、 はIIリトルエンディアンで表現されます。これらのシグネチャはそれぞれ 16 ビットのワード 1 つだけを必要とし、回文であるため、エンディアンに依存しません。はIntelIを表し、 はMotorolaを表します。Intel CPU はリトルエンディアンですが、Motorola 680x0 CPU はビッグ エンディアンです。この明示的なシグネチャにより、特定のファイルが異なるエンディアンを持つコンピュータで実行されている TIFF ライター プログラムによって生成された場合、TIFF リーダー プログラムが必要に応じてバイトをスワップすることができます。M
Intel 8080プラットフォームで最初に実装された結果、オペレーティングシステムに依存しないファイルアロケーションテーブル(FAT)ファイルシステムは、ネイティブに別のエンディアンを使用するプラットフォームであっても、リトルエンディアンのバイト順序で定義されるため、これらのプラットフォームでFATを維持するにはバイトスワップ操作が必要になります。
ファイルシステムと論理ボリュームマネージャを組み合わせたZFSは、適応型エンディアンを提供し、ビッグエンディアンとリトルエンディアンの両方のシステムで動作することが知られています。[ 39 ]
IETF RFC の多くは、ネットワーク オーダーという用語を使用しています。これは、ネットワーク プロトコルでバイトがワイヤを介して送信される順序を意味します。中でも、歴史的なRFC 1700 は、インターネット プロトコル スイートのプロトコルのネットワーク オーダーをビッグ エンディアンと定義しています。[ 40 ]
しかし、すべてのプロトコルがネットワーク順序としてビッグエンディアンのバイト順序を使用しているわけではありません。Server Message Block (SMB) プロトコルはリトルエンディアンのバイト順序を使用しています。CANopen では、マルチバイトのパラメータは常に最下位バイトから送信されます (リトルエンディアン)。Ethernet Powerlinkでも同様です。[ 41 ]
BerkeleyソケットAPI は、16 ビットおよび 32 ビットの整数をネットワーク バイト オーダーに変換したり、ネットワーク バイト オーダーから変換したりする一連の関数を定義しています。htons(host-to-network-short) 関数とhtonl(host-to-network-long) 関数は、それぞれ 16 ビットおよび 32 ビットの値をマシン (ホスト) オーダーからネットワーク オーダーに変換します。ntohsおよびntohl関数は、ネットワーク オーダーからホスト オーダーに変換します。[ 42 ] [ 43 ]これらの関数は、ビッグ エンディアン システムでは何もしない場合があります。
上位レベルのネットワークプロトコルは通常、バイト(主にオクテット)を最小単位とみなしますが、ネットワークスタックの最下層では、バイト内のビットの順序を扱う場合があります。ビットの順序は、リトルエンディアンまたはビッグエンディアンと呼ばれることがあります。ビットの順序は、バイトの順序と同じである必要はありません。たとえば、RS-232は最下位ビットを先に送信し、I2C は最上位ビットを先に送信し、SPI はどちらの順序でも送信できます。イーサネットは個々のビットを最下位ビットから先に送信しますが、バイトはビッグエンディアンで送信されます。