Подтвердить что ты не робот

Разница между порядком байдара большого конечного и маленького Endian Byte

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

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

4b9b3361

Ответ 1

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

За дополнительной информацией, пожалуйста, прочитайте страницу Endianness и/или UTF-16.

Ответ 2

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

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

Ответ 3

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

Wikipedia содержит более полное объяснение.

Ответ 4

little-endian: adj.

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

big-endian: adj.

[общее; Из Swift Gulliver Travels через знаменитую статью "О святых войнах" и "Просьба о мире" Дэнни Коэна, USC/ISI IEN 137 от 1 апреля 1980 года]

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

--- из файла Jargon: http://catb.org/~esr/jargon/html/index.html

Ответ 5

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).

Ответ 6

Для кодировки Unicode/UTF-16 необходимо указать байтовую сущность (большая или малая), потому что для кодов символов, которые используют больше, чем один байт, есть выбор: читать или записывать самый значительный байт в первый или последний раз. Unicode/UTF-16, поскольку они являются кодировками переменной длины (т.е. Каждый char может быть представлен одним или несколькими байтами) требует, чтобы это было указано. (Обратите внимание, однако, что слова "UTF-8" всегда имеют длину 8 бит/один байт (хотя символы могут быть несколькими точками), поэтому нет проблем с контентом.) Если кодер потока байтов, представляющий текст Unicode и декодер не согласен с тем, какое соглашение используется, неправильный код символа может быть интерпретирован. По этой причине либо конвенция endianness известна заранее, либо чаще всего байтовый порядок байтов обычно указывается в начале любого текстового файла в Юникоде /stream, чтобы указать, что используется большой или маленький порядковый номер.