Разница между старшим порядком байтов и младшим порядком байтов - PullRequest
57 голосов
/ 31 марта 2009

В чем разница между порядком байтов Big Endian и Little Endian?

Оба они, похоже, связаны с Unicode и UTF16. Где именно мы это используем?

Ответы [ 6 ]

111 голосов
/ 31 марта 2009

Big-Endian (BE) / Little-Endian (LE) - это два способа организации многобайтовых слов. Например, при использовании двух байтов для представления символа в UTF-16 существует два способа представления символа 0x1234 в виде строки байтов (0x00-0xFF):

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

Чтобы определить, использует ли текст UTF-16BE или UTF-16LE, спецификация рекомендует добавлять к строке знак порядка байтов (BOM), представляющий символ U + FEFF. Таким образом, если первые два байта текстового файла в кодировке UTF-16 равны FE, FF, кодировка - UTF-16BE. Для FF, FE это UTF-16LE.

Визуальный пример: слово «Пример» в разных кодировках (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 .

28 голосов
/ 24 июля 2009

Ответ Фердинанда (и других) верный, но неполный.

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 или 4 байта соответственно, поэтому порядок байтов соответствует порядку следования любого числа на этой платформе.

7 голосов
/ 31 марта 2009

UTF-16 кодирует Unicode в 16-битные значения. Большинство современных файловых систем работают с 8-битными байтами. Так, например, чтобы сохранить файл UTF-16 на диске, вам необходимо решить, какая часть 16-битного значения входит в первый байт, а какая во второй.

Википедия имеет более полное объяснение.

4 голосов
/ 04 мая 2010

little-endian: прил.

Описывает архитектуру компьютера, в которой в данном 16- или 32-битном слове байты с более низкими адресами имеют меньшее значение (слово хранится «little-end-first»). Семейства компьютеров PDP-11 и VAX и микропроцессоры Intel, а также большое количество коммуникационного и сетевого оборудования не имеют аналогов. Этот термин иногда используется для описания порядка элементов, отличных от байтов; чаще всего биты внутри байта.

big-endian: прил.

[общая; Из путешествий Свифта Гулливера через знаменитую газету Дэнни Коэна «Священные войны и призыв к миру», USC / ISI IEN 137, от 1 апреля 1980 г.]

Описывает архитектуру компьютера, в которой в заданном многобайтовом числовом представлении старший значащий байт имеет наименьший адрес (слово хранится «big-end-first»). Большинство процессоров, в том числе семейство IBM 370, PDP-10, семейства микропроцессоров Motorola и большинство различных конструкций RISC, имеют старшую последовательность. Порядок байтов в старшем порядке также иногда называется сетевым порядком.

--- из файла жаргона: http://catb.org/~esr/jargon/html/index.html

2 голосов
/ 18 февраля 2015

Big-endian и little-endian - это термины, которые описывают порядок, в котором последовательность байтов хранится в памяти компьютера.

1. Big-endian - это порядок, в котором «большой конец» (наиболее значимое значение в последовательности) сохраняется первым (по самому низкому адресу хранения).

2. Little-endian - это порядок, в котором «младший конец» (наименее значимое значение в последовательности) сохраняется первым.

Например

В компьютере с прямым порядком байтов два байта, необходимые для шестнадцатеричного числа 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).

1 голос
/ 31 марта 2009

Порядковый номер байта (большой или маленький) должен быть указан для кодировки Unicode / UTF-16, потому что для кодов символов, которые используют более одного байта, есть выбор, читать или записывать старший значащий байт первый или последний. Unicode / UTF-16, так как они являются кодировками переменной длины (то есть каждый символ может быть представлен одним или несколькими байтами), это необходимо указать. (Тем не менее, обратите внимание, что «слова» в UTF-8 всегда имеют длину 8 бит / один байт [хотя символы могут быть несколькими точками], поэтому проблем с порядком байтов не существует.) декодер не согласен с тем, какое соглашение используется, неверный символьный код может быть интерпретирован. По этой причине либо соглашение о порядке байтов известно заранее, либо чаще в начале любого текстового файла / потока Unicode указывается знак порядка байтов , указывающий, используется ли порядковый номер с большим или меньшим порядком байтов.

...