stringtranslate.com

Порядок байтов

«Путешествия Гулливера » Джонатана Свифта , роман, из которого был придуман этот термин.

В вычислительной технике порядок байтов в слове цифровых данных передается по среде передачи данных или сохраняется ( вверх ) в памяти компьютера , при этом учитывается только значимость байта по сравнению с ранним доступом. Порядок байтов в первую очередь выражается в терминах с прямым порядком байтов (BE) или прямым порядком байтов (LE), терминах, введенных Дэнни Коэном в информатику для упорядочивания данных в заметках об экспериментах в Интернете , опубликованных в 1980 году. [1] Прилагательное с порядком байтов происходит от Сочинения англо-ирландского писателя XVIII века Джонатана Свифта . В романе 1726 года «Путешествия Гулливера» он изображает конфликт между сектами лилипутов, разделившихся на разбивающих скорлупу вареного яйца с большого конца или с маленького конца. [2] [3] По аналогии, ЦП может читать сначала большой конец цифрового слова, либо сначала маленький конец.

Компьютеры хранят информацию в группах двоичных битов разного размера. Каждой группе присваивается номер, называемый ее адресом , который компьютер использует для доступа к этим данным. На большинстве современных компьютеров наименьшая группа данных с адресом имеет длину восемь бит и называется байтом. Большие группы содержат два и более байта, например, 32-битное слово содержит четыре байта. Компьютер может нумеровать отдельные байты в большой группе двумя способами, начиная с любого конца. Оба типа порядка байтов широко используются в цифровой электронной технике. Первоначальный выбор порядка байтов в новом дизайне часто бывает произвольным, но последующие технологические версии и обновления закрепляют существующий порядок байтов для обеспечения обратной совместимости .

В системе с прямым порядком байтов старший байт слова хранится по наименьшему адресу памяти , а младший байт — по наибольшему. В системе с прямым порядком байтов, напротив, младший байт хранится по наименьшему адресу. [4] [5] [6] Из этих двух вариантов обратный порядок байтов, таким образом, ближе к тому, как цифры чисел записываются слева направо в английском языке, сравнивая цифры с байтами. Двусторонний порядок байтов — это функция, поддерживаемая многочисленными компьютерными архитектурами, в которых предусмотрен переключаемый порядок байтов при выборке и сохранении данных или при выборке инструкций. Другие порядки обычно называются средним порядком байтов или смешанным порядком байтов . [7] [8] [9] [10]

Прямой порядок байтов — это доминирующий порядок в сетевых протоколах, например, в наборе протоколов Интернета , где он называется сетевым порядком , при котором первым передается наиболее значимый байт. И наоборот, прямой порядок байтов является доминирующим порядком для процессорных архитектур ( x86 , большинство реализаций ARM , базовые реализации RISC-V ) и связанной с ними памяти. Форматы файлов могут использовать любой порядок; некоторые форматы используют смесь того и другого или содержат индикатор того, какой порядок используется во всем файле. [11]

Характеристики

Диаграмма, демонстрирующая порядок байтов с прямым порядком байтов по сравнению с прямым порядком байтов

Компьютерная память состоит из последовательности ячеек памяти (наименьших адресуемых единиц); в машинах, поддерживающих байтовую адресацию , эти единицы называются байтами . Каждый байт идентифицируется и доступен в аппаратном и программном обеспечении по его адресу в памяти . Если общее количество байтов в памяти равно n , то адреса нумеруются от 0 до n  - 1.

Компьютерные программы часто используют структуры или поля данных , которые могут содержать больше данных, чем может быть сохранено в одном байте. В контексте этой статьи, где его тип не может быть сколь угодно сложным, «поле» состоит из последовательной последовательности байтов и представляет собой «простое значение данных», которым – по крайней мере потенциально – можно манипулировать с помощью одной аппаратной инструкции . В большинстве систем адресом многобайтового простого значения данных является адрес его первого байта (байта с наименьшим адресом). Исключением из этого правила является, например, инструкция Add IBM 1401 , которая адресует поля переменной длины в их младшей позиции (с самым высоким адресом), причем их длина определяется словесным знаком, установленным в их старшей позиции (с самой низкой адресацией). ) позиция. Когда выполняется такая операция, как сложение, процессор начинает с позиций младшего порядка по старшим адресам двух полей и переходит к старшим. [ нужна цитата ]

Еще одним важным атрибутом байта, являющегося частью «поля», является его «значение». Эти атрибуты частей поля играют важную роль в последовательности доступа к байтам компьютерного оборудования, точнее: алгоритмов низкого уровня, влияющих на результаты компьютерной инструкции.

Числа

Позиционные системы счисления (в основном по основанию 2 или реже по основанию 10) являются преобладающим способом представления и, в частности, манипулирования целочисленными данными с помощью компьютеров. В чистом виде это справедливо для неотрицательных целых чисел среднего размера, например типа данных unsignedC. В такой системе счисления значение цифры, которую она вносит в целое число, определяется не только ее значением как отдельной цифры, но и положением, которое она занимает в полном числе, называемым ее значением. Эти позиции могут быть отображены в памяти в основном двумя способами: [12]

В этих выражениях термин «конец» подразумевает крайнюю точку, где происходит большая соотв. Сначала записывается небольшое значение, а именно, где начинается поле .

Целочисленные данные, которые напрямую поддерживаются компьютерным оборудованием , имеют фиксированную ширину низкой степени 2, например, 8 бит ≙ 1 байт, 16 бит ≙ 2 байта, 32 бита ≙ 4 байта, 64 бита ≙ 8 байтов, 128 бит ≙ 16 байт. Последовательность низкоуровневого доступа к байтам такого поля зависит от выполняемой операции. Для сложения , вычитания и умножения сначала осуществляется доступ к младшему байту . Для деления и сравнения сначала осуществляется доступ к наиболее значимому байту . См. § Порядок расчета.

Текст

Когда строки символов (текста) необходимо сравнить друг с другом, например, для поддержки какого-либо механизма, такого как сортировка , это очень часто делается лексикографически, когда один позиционный элемент (символ) также имеет позиционное значение. Лексикографическое сравнение означает почти везде: первый символ занимает первое место – как в телефонной книге. Почти все машины, которые могут сделать это с помощью одной инструкции, имеют обратный порядок байтов или, по крайней мере, смешанный порядок байтов. [ нужна цитата ]

Целые числа, записанные в виде текста, всегда представляются в памяти первой старшей цифрой, что похоже на обратный порядок байтов, независимо от направления текста .

Байтовая адресация

Когда байты памяти печатаются последовательно слева направо (например, в шестнадцатеричном дампе ), представление целых чисел с прямым порядком байтов имеет значение, увеличивающееся слева направо. Другими словами, при визуализации он появляется задом наперед, что может быть нелогичным.

Такое поведение возникает, например, в FourCC или подобных методах, которые включают упаковку символов в целое число, так что оно становится последовательностью определенных символов в памяти. Например, возьмем строку «ДЖОН», хранящуюся в шестнадцатеричном формате ASCII . На машинах с прямым порядком байтов значение отображается слева направо, что соответствует правильному порядку строк для чтения результата («JOH N»). Но на машине с прямым порядком байтов можно было бы увидеть «NHO J». Машины среднего звена еще больше усложняют ситуацию; например, на PDP-11 32-битное значение сохраняется в виде двух 16-битных слов «JO», «HN» с прямым порядком байтов, при этом символы в 16-битных словах сохраняются с прямым порядком байтов, в результате чего в «ОЙН Х». [ нужна цитата ]

Замена байтов

Обмен байтов заключается в перестановке байтов для изменения порядка байтов. Многие компиляторы предоставляют встроенные функции , которые, скорее всего, будут скомпилированы в собственные инструкции процессора ( bswap/ movbe), например __builtin_bswap32. Программные интерфейсы для замены включают в себя:

Некоторые наборы инструкций ЦП обеспечивают встроенную поддержку замены байтов с порядком байтов , например bswap[16] ( x86–486 и более поздние версии ) и rev[17] ( ARMv6 и более поздние версии).

Некоторые компиляторы имеют встроенные средства для замены байтов. Например, компилятор Intel Fortran поддерживает нестандартный CONVERTспецификатор при открытии файла, например: . Другие компиляторы имеют опции для генерации кода, который глобально обеспечивает преобразование для всех операций ввода-вывода с файлами. Это позволяет повторно использовать код в системе с противоположным порядком байтов без модификации кода.OPEN(unit, CONVERT='BIG_ENDIAN',...)

Соображения

Упрощенный доступ к части поля

В большинстве систем адрес многобайтового значения — это адрес его первого байта (байта с наименьшим адресом); Системы этого типа с прямым порядком байтов обладают свойством, заключающимся в том, что для достаточно малых значений данных одно и то же значение может быть прочитано из памяти разной длины без использования разных адресов (даже если наложены ограничения на выравнивание ). Например, 32-битная ячейка памяти с содержимым 4A 00 00 00может быть прочитана по тому же адресу, что и 8-битная (значение = 4A), 16-битная (004A), 24-битная (00004A) или 32-битная (0000004A). , все из которых сохраняют одно и то же числовое значение. Хотя это свойство прямого порядка байтов редко используется напрямую программистами высокого уровня, оно иногда применяется оптимизаторами кода, а также программистами на языке ассемблера . Хотя это и не разрешено в C++, такой каламбурный код разрешен как «определяемый реализацией» стандартом C11 [18] и широко используется [19] в коде, взаимодействующем с аппаратным обеспечением. [20]

Порядок расчета

Некоторые операции в позиционных системах счисления имеют естественный или предпочтительный порядок выполнения элементарных шагов. Этот порядок может повлиять на их производительность на небольших процессорах и микроконтроллерах с байтовой адресацией . Однако высокопроизводительные процессоры обычно извлекают многобайтовые операнды из памяти за то же время, что и один байт, поэтому порядок байтов не влияет на сложность аппаратного обеспечения.

Сложение, вычитание и умножение начинаются с позиции младшей значащей цифры и распространяют перенос на последующую, более значащую позицию. В большинстве систем адрес многобайтового значения — это адрес его первого байта (байта с наименьшим адресом). Реализация этих операций немного проще при использовании машин с прямым порядком байтов, где первый байт содержит младшую цифру.

Сравнение и деление начинаются с самой старшей цифры и распространяют возможный перенос на последующие менее значащие цифры. Для числовых значений фиксированной длины (обычно длиной 1,2,4,8,16) реализация этих операций немного проще на машинах с прямым порядком байтов.

Некоторые процессоры с прямым порядком байтов (например, IBM System/360 и его преемники) содержат аппаратные инструкции для лексикографического сравнения строк символов различной длины.

Обычная транспортировка данных с помощью оператора присваивания в принципе не зависит от порядка байтов процессора.

Аппаратное обеспечение

Многие исторические и существующие процессоры используют представление памяти с прямым порядком байтов либо исключительно, либо в качестве конструктивного варианта. IBM System/360 использует обратный порядок байтов, как и его преемники System/370 , ESA/390 и z/Architecture . PDP -10 использует адресацию с прямым порядком байтов для байт-ориентированных инструкций. Миникомпьютер IBM Series/1 использует обратный порядок байтов. Процессоры Motorola 6800/6801 , 6809 и 68000 используют формат big-endian. К архитектурам с прямым порядком байтов относятся IBM z/Architecture и OpenRISC .

В Datapoint 2200 использовалась простая последовательная логика с прямым порядком байтов для облегчения распространения переноса . Когда Intel разработала микропроцессор 8008 для Datapoint, для совместимости они использовали прямой порядок байтов. Однако, поскольку Intel не смогла поставить 8008 вовремя, Datapoint использовала эквивалент интеграции среднего масштаба , но прямой порядок байтов сохранялся в большинстве разработок Intel, включая MCS-48 и 8086 , а также их преемников x86 . [21] [22] DEC Alpha , Atmel AVR , VAX , семейство MOS Technology 6502 (включая Western Design Center 65802 и 65C816 ), Zilog Z80 (включая Z180 и eZ80 ), Altera Nios II и многие другие процессоры и Семейства процессоров также имеют прямой порядок байтов.

Intel 8051 , в отличие от других процессоров Intel, ожидает 16-битные адреса для LJMP и LCALL в формате с прямым порядком байтов; однако инструкции xCALL сохраняют адрес возврата в стеке в формате с прямым порядком байтов. [23]

Архитектуры набора команд IA-32 и x86-64 используют формат с прямым порядком байтов. Другие архитектуры набора команд, которые следуют этому соглашению и допускают только режим с прямым порядком байтов, включают Nios II , Andes Technology NDS32 и Qualcomm Hexagon .

Некоторые архитектуры набора команд являются «двусторонними» и позволяют запускать программное обеспечение с любым порядком байтов; к ним относятся Power ISA , SPARC , ARM AArch64 , C-Sky и RISC-V . IBM AIX и IBM i работают в режиме прямого порядка байтов на Power ISA с двойным порядком байтов; Изначально Linux работал в режиме с прямым порядком байтов, но к 2019 году IBM перешла на режим с прямым порядком байтов для Linux, чтобы облегчить перенос программного обеспечения Linux с x86 на Power. [24] [25] SPARC не имеет соответствующего развертывания с прямым порядком байтов, поскольку и Oracle Solaris , и Linux работают в режиме с прямым порядком байтов в системах SPARC с двусторонним порядком байтов, и на практике их можно считать прямым порядком байтов. ARM, C-Sky и RISC-V не имеют соответствующих развертываний с прямым порядком байтов и на практике могут считаться с прямым порядком байтов.

Двусторонний порядок байтов

Некоторые наборы инструкций имеют настройку, которая позволяет переключать порядок байтов при выборке и сохранении данных, выборке команд или и том, и другом. Эта функция может повысить производительность или упростить логику сетевых устройств и программного обеспечения. Слово bi-endian , когда говорится об аппаратном обеспечении, обозначает способность машины вычислять или передавать данные в любом формате с порядковым порядком байтов.

Некоторые архитектуры (включая ARM версии 3 и выше, PowerPC , Alpha , SPARC V9, MIPS , Intel i860 , PA-RISC , SuperH SH-4 и IA-64 ) имеют настройку, которая позволяет переключать порядок байтов при выборке и сохранении данных, инструкции извлекает, или и то, и другое. Эта функция может повысить производительность или упростить логику сетевых устройств и программного обеспечения. Слово bi-endian , когда говорится об аппаратном обеспечении, обозначает способность машины вычислять или передавать данные в любом формате с порядковым порядком байтов.

Многие из этих архитектур можно переключить с помощью программного обеспечения на определенный формат по умолчанию (обычно это делается при запуске компьютера); однако в некоторых системах порядок байтов по умолчанию выбирается аппаратно на материнской плате и не может быть изменен с помощью программного обеспечения (например, Alpha, которая работает только в режиме с обратным порядком байтов на Cray T3E ).

Термин bi-endian относится прежде всего к тому, как процессор обрабатывает доступ к данным. Доступ к инструкциям (выборка командных слов) на данном процессоре может по-прежнему предполагать фиксированный порядок байтов, даже если доступ к данным полностью двусторонний, хотя это не всегда так, как, например, в процессоре Itanium на базе Intel IA-64 , который позволяет и то и другое.

Некоторым процессорам с номинальным обратным порядком байтов требуется помощь материнской платы для полного переключения порядка байтов. Например, 32-битные процессоры PowerPC , ориентированные на настольные компьютеры , в режиме прямого порядка байтов действуют как процессоры с прямым порядком байтов с точки зрения исполняемых программ, но они требуют, чтобы материнская плата выполнила 64-битную замену во всех 8-байтовых полосах для убедитесь, что представление вещей с прямым порядком байтов будет применяться к устройствам ввода-вывода . В отсутствие этого необычного аппаратного обеспечения материнской платы программное обеспечение драйвера устройства должно записывать данные по разным адресам, чтобы отменить незавершенное преобразование, а также выполнять обычную замену байтов. [ оригинальное исследование? ]

Некоторые процессоры, такие как многие процессоры PowerPC, предназначенные для встроенного использования, и почти все процессоры SPARC, позволяют выбирать порядок байтов для каждой страницы.

Процессоры SPARC с конца 1990-х годов (процессоры, совместимые с SPARC v9) позволяют выбирать порядок байтов данных для каждой отдельной инструкции, которая загружается из памяти или сохраняется в памяти.

Архитектура ARM поддерживает два режима с прямым порядком байтов, называемые BE-8 и BE-32 . [26] Процессоры до ARMv5 поддерживают только BE-32 или режим, инвариантный по словам. Здесь любой естественно выровненный 32-битный доступ работает как в режиме с прямым порядком байтов, но доступ к байту или 16-битному слову перенаправляется на соответствующий адрес, а невыровненный доступ не допускается. В ARMv6 представлен BE-8 или байт-инвариантный режим, в котором доступ к одному байту работает как в режиме с прямым порядком байтов, но доступ к 16-битному, 32-битному или (начиная с ARMv8) 64-битному слову приводит к замене байтов. данных. Это упрощает доступ к невыровненной памяти, а также доступ к отображаемой памяти к регистрам, отличным от 32-битных.

Многие процессоры имеют инструкции для преобразования слова в регистре в обратный порядок байтов, то есть меняют порядок байтов в 16-, 32- или 64-битном слове.

Последние процессоры Intel с архитектурой x86 и x86-64 имеют инструкцию MOVBE ( Intel Core начиная с поколения 4, после Atom ), [27] которая извлекает слово в формате с прямым порядком байтов из памяти или записывает слово в память в формате с прямым порядком байтов. В остальном эти процессоры полностью придерживаются прямого порядка байтов.

Существуют также устройства, которые в разных местах используют разные форматы. Например, индикатор батареи BQ27421 Texas Instruments использует формат с прямым порядком байтов для своих регистров и формат с прямым порядком байтов для своей оперативной памяти .

SPARC исторически использовал обратный порядок байтов до версии 9, которая является двупорядковой. Аналогичным образом, ранние процессоры IBM POWER имели обратный порядок байтов, но потомки PowerPC и Power ISA теперь имеют обратный порядок байтов. Архитектура ARM имела прямой порядок байтов до версии 3, когда она стала двусторонней.

Плавающая запятая

Хотя многие процессоры используют хранилище с прямым порядком байтов для всех типов данных (целые, с плавающей запятой), существует ряд аппаратных архитектур, в которых числа с плавающей запятой представлены в форме с прямым порядком байтов, а целые числа представляются в форме с прямым порядком байтов. [28] Существуют процессоры ARM , которые имеют представление чисел с плавающей запятой со смешанным порядком байтов для чисел двойной точности: каждое из двух 32-битных слов сохраняется с прямым порядком байтов, но самое старшее слово сохраняется первым. VAX с плавающей запятой хранит 16-битные слова с прямым порядком байтов в порядке с прямым порядком байтов. Поскольку существовало множество форматов с плавающей запятой, для которых не было представления в стандарте сети, стандарт XDR использует в качестве представления IEEE 754 с прямым порядком байтов. Поэтому может показаться странным, что широко распространенный стандарт чисел с плавающей запятой IEEE 754 не определяет порядок байтов. [29] Теоретически это означает, что даже стандартные данные IEEE с плавающей запятой, записанные одной машиной, могут быть недоступны для чтения другой. Однако на современных стандартных компьютерах (т. е. реализующих IEEE 754) можно с уверенностью предположить, что порядок байтов одинаков для чисел с плавающей запятой и для целых чисел, что делает преобразование простым независимо от типа данных. Однако небольшие встроенные системы , использующие специальные форматы с плавающей запятой, могут оказаться другим вопросом.

Данные переменной длины

Большинство рассмотренных до сих пор инструкций содержат размер (длину) своих операндов в коде операции . Часто доступные длины операндов составляют 1, 2, 4, 8 или 16 байт. Но существуют также архитектуры, в которых длина операнда может храниться в отдельном поле инструкции или вместе с самим операндом, например, с помощью словесного знака . Такой подход допускает длину операндов до 256 байт и более. Типами данных таких операндов являются символьные строки или BCD . Машины, способные манипулировать такими данными с помощью одной инструкции (например, сравнить, добавить), включают IBM 1401 , 1410 , 1620 , System/360 , System/370 , ESA/390 и z/Architecture , все они имеют обратный порядок байтов.

средний конец

Возможны многочисленные другие упорядочивания, обычно называемые средним порядком байтов или смешанным порядком байтов .

Архитектура PDP-11 имеет прямой порядок байтов в своих собственных 16-битных словах, но хранит 32-битные данные в виде необычных пар слов с прямым порядком байтов. Unix была одной из первых систем, позволяющих компилировать один и тот же код для платформ с разными внутренними представлениями. Одна из первых конвертированных программ должна была распечатать Unix, но вместо этого на Series/1 она печатала nUxi. [30]

PDP -11 в принципе представляет собой 16-битную систему с прямым порядком байтов. Инструкции по преобразованию между значениями с плавающей запятой и целыми числами в дополнительном процессоре с плавающей запятой PDP-11/45, PDP-11/70 и в некоторых более поздних процессорах хранят 32-битные целочисленные значения двойной точности с 16-битные половины поменялись местами в ожидаемом порядке с прямым порядком байтов. Компилятор UNIX C использовал тот же формат для 32-битных длинных целых чисел. Этот порядок известен как PDP-endian . [31]

Способ интерпретации этого порядка байтов заключается в том, что он хранит 32-битное целое число как два 16-битных слова с прямым порядком байтов и порядком слов с прямым порядком байтов.

Дескрипторы сегментов IA -32 и совместимых процессоров сохраняют 32-битный базовый адрес сегмента, хранящийся в прямом порядке, но в четырех непоследовательных байтах, в относительных позициях 2, 3, 4 и 7 начала дескриптора. [32]

Программное обеспечение

Логический дизайн

Языки описания оборудования (HDL), используемые для выражения цифровой логики, часто поддерживают произвольный порядок байтов с произвольной степенью детализации. Например, в SystemVerilog слово может быть определено как с прямым порядком байтов или с прямым порядком байтов. [ нужна цитата ]

Файлы и файловые системы

Распознавание порядка байтов важно при чтении файла или файловой системы, созданных на компьютере, с другим порядком байтов.

Последовательные неформатированные файлы Фортрана, созданные с одним порядком байтов, обычно не могут быть прочитаны в системе с другим порядком байтов, поскольку Фортран обычно реализует запись ( определяемую как данные, записанные одним оператором Фортрана), поскольку данным предшествуют и следуют поля счетчика, которые представляют собой целые числа, равные к количеству байтов в данных. Попытка прочитать такой файл с помощью Фортрана в системе с другим порядком байтов приводит к ошибке времени выполнения, поскольку поля счетчика неверны.

Текст в Юникоде может опционально начинаться с метки порядка байтов (BOM), чтобы указать порядок байтов файла или потока. Его кодовая точка — U+FEFF. Например, в UTF-3200 00 FE FF файл с прямым порядком байтов должен начинаться с ; прямой порядок байтов должен начинаться с FF FE 00 00.

Форматы двоичных данных приложения, такие как файлы MATLAB .mat или формат данных .bil , используемые в топографии, обычно не зависят от порядка байтов. Это достигается за счет хранения данных всегда с одним фиксированным порядком байтов или переноса с данными переключателя для указания порядка байтов. Примером первого является двоичный формат файла XLS , который переносим между системами Windows и Mac и всегда имеет прямой порядок байтов, требуя, чтобы приложение Mac меняло местами байты при загрузке и сохраняло при работе на процессоре Motorola 68K или PowerPC с прямым порядком байтов. [33]

Файлы изображений TIFF являются примером второй стратегии, заголовок которой сообщает приложению о порядке байтов их внутренних двоичных целых чисел. Если файл начинается с подписи, MMэто означает, что целые числа представлены как с прямым порядком байтов, а с IIпрямым порядком байтов. Для каждой из этих подписей требуется одно 16-битное слово, и они являются палиндромами , поэтому они не зависят от порядка байтов. Iобозначает Intel и Mобозначает Motorola . Процессоры Intel имеют прямой порядок байтов, а процессоры Motorola 680x0 — обратный порядок байтов. Эта явная подпись позволяет программе чтения TIFF при необходимости менять местами байты, когда данный файл был создан программой записи TIFF, работающей на компьютере с другим порядком байтов.

В результате своей первоначальной реализации на платформе Intel 8080 независимая от операционной системы файловая система таблицы размещения файлов (FAT) определяется с прямым порядком байтов, даже на платформах, использующих другой порядок байтов, что требует операций замены байтов для поддержания FAT на этих платформах.

Известно, что ZFS , сочетающая в себе файловую систему и менеджер логических томов , обеспечивает адаптивный порядок байтов и работает как с системами с прямым порядком байтов, так и с прямым порядком байтов. [34]

сеть

Во многих документах IETF RFC используется термин « сетевой порядок» , означающий порядок передачи байтов по сети в сетевых протоколах . Среди прочего, исторический RFC 1700 определяет сетевой порядок протоколов в наборе протоколов Интернета как обратный порядок байтов. [35]

Однако не все протоколы используют обратный порядок байтов в качестве сетевого порядка. Протокол блока сообщений сервера (SMB) использует порядок байтов с прямым порядком байтов. В CANopen многобайтовые параметры всегда передаются сначала младшим байтом (с прямым порядком байтов). То же самое справедливо и для Ethernet Powerlink . [36]

API сокетов Беркли определяет набор функций для преобразования 16- и 32-битных целых чисел в сетевой порядок байтов и обратно: функции (host-to-network-short) и (host-to - network-long) преобразуют 16- и 32-битные значения соответственно от машины ( хоста ) до сетевого порядка; Функции и преобразуют сетевой порядок в хостовый. [37] [38] Эти функции могут быть неактивными в системе с прямым порядком байтов.htonshtonlntohsntohl

В то время как сетевые протоколы высокого уровня обычно рассматривают байт (чаще всего подразумеваемый как октет ) в качестве атомарной единицы, самые нижние уровни сетевого стека могут иметь дело с упорядочиванием битов внутри байта.

Смотрите также

Рекомендации

  1. ^ Коэн, Дэнни (1 апреля 1980 г.). О священных войнах и призыве к миру. IETF . ИЕН 137.Также опубликовано в журнале IEEE Computer , октябрь 1981 г.
  2. ^ Свифт, Джонатан (1726). «Путешествие в лилипутию, глава IV». Путешествия Гулливера .
  3. ^ Брайант, Рэндал Э .; Дэвид, О'Халларон (2016), Компьютерные системы: взгляд программиста (3-е изд.), Pearson Education, стр. 79, ISBN 978-1-488-67207-1
  4. ^ Понимание порядка байтов с прямым и прямым порядком байтов.
  5. ^ Порядок байтов PPC
  6. ^ Написание кода, независимого от порядка байтов, на C
  7. ^ "Пионер Зала славы Интернета" . Зал славы Интернета . Интернет-сообщество .
  8. ^ Кэри, Дэвид. «Часто задаваемые вопросы по порядку байтов» . Проверено 11 октября 2010 г.
  9. ^ Джеймс, Дэвид В. (июнь 1990 г.). «Мультиплексные автобусы: войны с порядком байтов продолжаются». IEEE микро . 10 (3): 9–21. дои : 10.1109/40.56322. ISSN  0272-1732. S2CID  24291134.
  10. ^ Блан, Бертран; Маарауи, Боб (декабрь 2005 г.). «Порядок байтов или где находится байт 0?» (PDF) . Проверено 21 декабря 2008 г.
  11. ^ Формат файла для обмена изображениями в Интернете. Апрель 1992 г. с. 7. дои : 10.17487/RFC1314 . РФК 1314 . Проверено 16 августа 2021 г.
  12. ^ Таненбаум, Эндрю С.; Остин, Тодд М. (4 августа 2012 г.). Структурированная компьютерная организация. Прентис Холл PTR. ISBN 978-0-13-291652-3. Проверено 18 мая 2013 г.
  13. ^ byteorder(3)  -  Руководство программиста Linux - Библиотечные функции
  14. ^ endian(3)  -  Руководство программиста Linux - Библиотечные функции
  15. ^ "std::byteswap". ru.cppreference.com . Проверено 3 октября 2023 г.
  16. ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 2 (2A, 2B и 2C): Справочник по набору команд, Аризона» (PDF) . Интел. Сентябрь 2016. с. 3–112. Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 5 февраля 2017 г.
  17. ^ «Справочное руководство ARMv8-A» . АРМ Холдингс .
  18. ^ «Стандарт C11». ИСО. Раздел 6.5.2.3 «Структура и члены Союза», §3 и сноска 95 . Проверено 15 августа 2018 г.
  19. ^ «3.10 Параметры, управляющие оптимизацией: -fstrict-aliasing» . Коллекция компиляторов GNU (GCC) . Фонд свободного программного обеспечения . Проверено 15 августа 2018 г.
  20. Торвальдс, Линус (5 июня 2018 г.). «[GIT PULL] Обновление структуры свойств устройства для версии 4.18-rc1». Ядро Linux (список рассылки) . Проверено 15 августа 2018 г.
  21. ^ Хаус, Дэвид; Фаггин, Федерико; Фини, Хэл; Гельбах, Эд; Хофф, Тед; Мазор, Стэн; Смит, Хэнк (21 сентября 2006 г.). «Секция устной истории разработки и продвижения микропроцессора Intel 8008» (PDF) . Музей истории компьютеров . п. б5 . Проверено 23 апреля 2014 г.
  22. Лунде, Кен (13 января 2009 г.). Обработка информации CJKV. О'Рейли Медиа, Инк. с. 29. ISBN 978-0-596-51447-1. Проверено 21 мая 2013 г.
  23. ^ «Руководство пользователя Cx51: E. Порядок байтов» . keil.com .
  24. ^ Джефф Шил (16 июня 2016 г.). «Маленький порядок байтов и Linux в IBM Power Systems». ИБМ . Проверено 27 марта 2022 г.
  25. Тимоти Прикетт Морган (10 июня 2019 г.). «Переход на RHEL 8 начинается в энергосистемах». ITДжунгли . Проверено 26 марта 2022 г.
  26. ^ «Различия между автобусами БЕ-32 и БЕ-8» .
  27. ^ «Как обнаружить поддержку новых инструкций в семействе процессоров Intel® Core™ 4-го поколения» (PDF) . Проверено 2 мая 2017 г.
  28. ^ Савард, Джон Дж.Г. (2018) [2005], «Форматы с плавающей запятой», четырехъядерный блок , заархивировано из оригинала 03 июля 2018 г. , получено 16 июля 2018 г.
  29. ^ «упаковать – преобразовать список в двоичное представление» .
  30. ^ Яличс, Пол Дж.; Хейнс, Томас С. (1 декабря 1983 г.). «Перенос портативной операционной системы: UNIX на миникомпьютер IBM». Коммуникации АКМ . 26 (12): 1066–1072. дои : 10.1145/358476.358504 . S2CID  15558835.
  31. ^ Справочник по процессору PDP-11/45 (PDF) . Корпорация цифрового оборудования . 1973. с. 165. Архивировано (PDF) из оригинала 9 октября 2022 г.
  32. ^ Руководство программиста по архитектуре AMD64, том 2: Системное программирование (PDF) (технический отчет). 2013. с. 80. Архивировано из оригинала (PDF) 18 февраля 2018 г.
  33. ^ «Спецификация формата двоичных файлов Microsoft Office Excel 97 — 2007 (формат *.xls 97-2007)» . Корпорация Майкрософт. 2007.
  34. ^ Мэтт Аренс (2016). Внутреннее устройство ядра FreeBSD: подробное описание кода. Документация OpenZFS/Чтение и запись лекций.
  35. ^ Рейнольдс, Дж .; Постел, Дж. (октябрь 1994 г.). «Обозначения данных». Присвоенные номера. IETF . п. 3. дои : 10.17487/RFC1700 . СТД 2. RFC 1700 . Проверено 2 марта 2012 г.
  36. ^ Группа по стандартизации Ethernet POWERLINK (2012), Рабочий проект предложения EPSG 301: Спецификация профиля связи Ethernet POWERLINK, версия 1.1.4 , глава 6.1.1.
  37. ^ IEEE и Открытая группа (2018). «3. Системные интерфейсы». Базовые спецификации открытой группы, выпуск 7. Том. 2. п. 1120 . Проверено 9 апреля 2021 г.
  38. ^ «htonl(3) — справочная страница Linux». linux.die.net . Проверено 9 апреля 2021 г.

Внешние ссылки