ビッグエンディアンとリトルエンディアンのバイトオーダーの違い

StackOverflow https://stackoverflow.com/questions/701624

  •  22-08-2019
  •  | 
  •  

質問

バイトオーダーのビッグエンディアンとリトルエンディアンの違いは何ですか?

これらはどちらも Unicode と UTF16 に関連しているようです。これは具体的にどこで使用するのでしょうか?

役に立ちましたか?

解決

ビッグエンディアン(BE) /リトルエンディアン(LE)は、マルチバイトの単語を整理する2つの方法です。たとえば、UTF-16の文字を表すために2つのバイトを使用する場合、文字を表す2つの方法があります 0x1234 一連のバイト(0x00-0xff)として:

Byte Index:      0  1
---------------------
Big-Endian:     12 34
Little-Endian:  34 12

テキストがUTF-16BEまたはUTF-16LEを使用するかどうかを判断するために、仕様はAを準備することをお勧めします バイトオーダーマーク (bom)文字列u+feffを表します。したがって、UTF-16エンコードされたテキストファイルの最初の2バイトが FE, FF, 、エンコーディングはUTF-16BEです。為に FF, FE, 、UTF-16leです。

視覚的な例:異なるエンコーディングの「例」という言葉(BOMを含むUTF-16):

Byte Index:   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
------------------------------------------------------------
ASCII:       45 78 61 6d 70 6c 65
UTF-16BE:    FE FF 00 45 00 78 00 61 00 6d 00 70 00 6c 00 65
UTF-16LE:    FF FE 45 00 78 00 61 00 6d 00 70 00 6c 00 65 00

詳細については、のウィキペディアページをお読みください エンディアンネス および/または UTF-16.

他のヒント

フェルディナンドの答え(およびその他)は正しいが、不完全です。

Big Endian(Be) / Little Endian(LE)は、UTF-16またはUTF-32とは何の関係もありません。それらはUnicodeの前に存在し、数字のバイトがコンピューターのメモリにどのように保存されるかに影響しました。それらはプロセッサに依存します。

値がある番号がある場合 0x12345678 その後、メモリではとして表されます 12 34 56 78 (be)または 78 56 34 12 (le)。

UTF-16とUTF-32は、それぞれ2バイトでそれぞれ2つに表されているため、バイトの順序は、そのプラットフォームで任意の数字が続く順序を尊重します。

UTF-16はユニコードを16ビット値にエンコードします。ほとんどの最新のファイルシステムは、8ビットバイトで動作します。したがって、UTF-16エンコードされたファイルをディスクに保存するには、たとえば、16ビット値のどの部分が最初のバイトにあるか、どれが2番目のバイトに入るかを決定する必要があります。

ウィキペディア より完全な説明があります。

リトルエンディアン:形容詞

特定の 16 ビットまたは 32 ビット ワード内で、下位アドレスのバイトの重要性が低くなる (ワードが「リトルエンド ファースト」で格納される) コンピューター アーキテクチャについて説明します。PDP-11 および VAX ファミリのコンピュータ、Intel マイクロプロセッサ、および多くの通信およびネットワーク ハードウェアはリトル エンディアンです。この用語は、バイト以外の単位の順序を説明するために使用されることもあります。ほとんどの場合、バイト内のビットです。

ビッグエンディアン:形容詞

[一般;スウィフトのガリバー旅行記より、ダニー・コーエンによる有名な論文『聖戦と平和への嘆願』経由、USC/ISI IEN 137、1980 年 4 月 1 日付け]

特定のマルチバイト数値表現内で、最上位バイトが最も低いアドレスを持つ (単語が「ビッグエンドファースト」で格納される) コンピューター アーキテクチャについて説明します。IBM 370 ファミリ、PDP-10、Motorola マイクロプロセッサ ファミリ、およびさまざまな RISC 設計のほとんどを含むほとんどのプロセッサはビッグ エンディアンです。ビッグエンディアンのバイトオーダーは、ネットワークオーダーと呼ばれることもあります。

---専門用語ファイルより: http://catb.org/~esr/jargon/html/index.html

ビッグエンディアンとリトルエンディアンは、バイトのシーケンスがコンピューターメモリに保存される順序を説明する用語です。

1.ビッグエンディアンは、「ビッグエンド」(シーケンスの最も重要な値)が最初に保存される順序です(最低のストレージアドレス)。

2.リトルエンディアンは、最初に「リトルエンド」(シーケンスの最小の有意な値)が保存される順序です。

例えば

ビッグエンディアンコンピューターでは、16進数に必要な2つのバイト 4F52 として保管されます 4F52 ストレージ (if 4F is stored at storage address 1000, for example, 52 will be at address 1001).

小さなエンディアンシステムでは、 524F (52 at address 1000, 4F at 1001).

バイトエンディアンネス (BIGまたはLITEL)UNICODE/UTF-16エンコーディングには指定する必要があります。単一のバイトを使用する文字コードの場合、読み取り/書き込みかどうかの選択肢があります。 最も重要なバイト 最初または最後。 Unicode/UTF-16は、可変長エンコーディング(つまり、各charは1つまたは複数のバイトで表すことができる)であるため、これを指定する必要があります。 (ただし、UTF-8の「単語」は常に8ビット/1バイトの長さです[文字は複数のポイントになる可能性があります]。したがって、Endiannessに問題はありません。)Unicodeテキストを表すバイトストリームのエンコーダーとデコーダーは、どの慣習が使用されているかについて合意されていません。間違った文字コードを解釈できます。このため、エンディアンネスの慣習は事前に知られているか、より一般的には バイトオーダーマーク 通常、Unicodeテキストファイル/ストリームの先頭に指定されて、大型または小さなエンドの順序が使用されていることを示します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top