Разница между порядком байтов Big Endian и little Endian


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

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

6 54

6 ответов:

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. Итак, если первые два байта a Кодированный текстовый файл UTF-16FE,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 кодирует Юникод в 16-битные значения. Большинство современных файловых систем работают на 8-битных байтов. Итак, чтобы сохранить кодированный файл UTF-16 на диск, например, вы должны решить, какая часть 16-битного значения входит в первый байт, а какая-во второй байт.

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

little-endian: adj.

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

big-endian: adj.

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

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

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

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

в системе little-endian он будет храниться как 524F (52 at address 1000, 4F at 1001).

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