В чем разница между порядком байтов Big Endian и Little Endian?
Оба они, похоже, связаны с Unicode и UTF16. Где именно мы это используем?
В чем разница между порядком байтов Big Endian и Little Endian?
Оба они, похоже, связаны с Unicode и UTF16. Где именно мы это используем?
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 с BOM):
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.
Ответ Фердинанда (и других) правильный, но неполный.
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 байтах, поэтому порядок байтов соответствует порядку, который следует за любым числом на этой платформе.
UTF-16 кодирует Unicode в 16-битные значения. Большинство современных файловых систем работают с 8-битными байтами. Итак, чтобы сохранить файл в кодировке UTF-16 на диск, например, вы должны решить, какая часть 16-битного значения идет в первый байт, а какая - во второй.
Википедия содержит более полное объяснение.
прямой порядок байтов: прил.
Описывает компьютерную архитектуру, в которой в данном 16- или 32-битном слове байты по младшим адресам имеют меньшее значение (слово хранится «сначала маленький конец»). Семейства компьютеров PDP-11 и VAX, микропроцессоры Intel и большое количество коммуникационного и сетевого оборудования имеют прямой порядок байтов. Этот термин иногда используется для описания порядка блоков, отличных от байтов; чаще всего биты в байте.
с прямым порядком байтов: прил.
[общий; Из «Путешествий Гулливера» Свифта через знаменитую статью Дэнни Коэна «О священных войнах и призыве к миру», USC / ISI IEN 137, от 1 апреля 1980 г.]
Описывает компьютерную архитектуру, в которой в заданном многобайтовом числовом представлении наиболее значимый байт имеет наименьший адрес (слово хранится «сначала на большом конце»). Большинство процессоров, включая семейство IBM 370, PDP-10, семейства микропроцессоров Motorola и большинство различных конструкций RISC, имеют обратный порядок байтов. Порядок байтов с прямым порядком байтов иногда называют сетевым порядком.
--- из файла жаргона: http://catb.org/~esr/jargon/html/index.html
Big-endian и 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).
Порядок байтов (большой или маленький) необходимо указать для кодировки Unicode / UTF-16, потому что для коды символов, которые используют более одного байта, можно выбрать, следует ли читать / записывать наиболее значимый байт первым или последним. Для Unicode / UTF-16, поскольку они являются кодировками переменной длины (т.е. каждый символ может быть представлен одним или несколькими байтами), необходимо указать это. (Обратите внимание, однако, что «слова» UTF-8 всегда имеют длину 8 бит / один байт [хотя символы могут быть несколькими точками], поэтому нет проблем с порядком байтов.) Если кодировщик потока байтов, представляющих текст Unicode, и декодер не договорился о том, какое соглашение используется, может быть интерпретирован неправильный код символа. По этой причине либо порядок байтов известен заранее, либо чаще используется знак порядка байтов. обычно указывается в начале любого текстового файла / потока Unicode, чтобы указать, используется ли большой или маленький порядок следования байтов.