Разница между порядком байтов Big Endian и little Endian
в чем разница между порядком байтов Big Endian и Little Endian ?
оба они, похоже, связаны с Unicode и UTF16. Где именно мы это используем?
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-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 кодирует Юникод в 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, чтобы указать, есть ли большой или маленький порядок конца используется.