Jump to content

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

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

В вычислениях порядок , при байтов памяти в слове цифровых данных передается по среде передачи данных или адресуется (по возрастанию адреса) в компьютера байта этом учитывается только значимость по сравнению с ранним доступом. Порядок байтов в первую очередь выражается как обратный порядок байтов (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) являются преобладающим способом представления и, в частности, манипулирования целочисленными данными с помощью компьютеров. В чистом виде это справедливо для неотрицательных целых чисел среднего размера, например типа данных C. unsigned. В такой системе счисления значение цифры, которую она вносит в целое число, определяется не только ее значением как отдельной цифры, но и положением, которое она занимает в полном числе, называемым ее значением. Эти позиции могут быть отображены в памяти главным образом двумя способами: [12]

  • Уменьшение числового значения с увеличением адресов памяти (или увеличением времени), известное как big-endian и
  • Увеличение числового значения с увеличением адреса памяти (или увеличением времени), известное как small-endian .

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

Целочисленные данные, которые напрямую поддерживаются компьютерным оборудованием , имеют фиксированную ширину низкой степени 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 и новее, i960 — i960Jx и новее [17] ), и rev[18] ( ARMv6 и более поздние версии).

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

Соображения

[ редактировать ]

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

[ редактировать ]

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

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

[ редактировать ]

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

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

Сравнение и деление начинаются с самой старшей цифры и распространяют возможный перенос на последующие менее значащие цифры. Для числовых значений фиксированной длины (обычно длиной 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 . преемников [22] [23] 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 сохраняют адрес возврата в стеке в формате с прямым порядком байтов. [24]

Архитектуры набора команд 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. [25] [26] SPARC не имеет соответствующего развертывания с прямым порядком байтов, поскольку и Oracle Solaris, и Linux работают в режиме с прямым порядком байтов в системах SPARC с двойным порядком байтов, и на практике их можно считать прямым порядком байтов. ARM, C-Sky и RISC-V не имеют соответствующих развертываний с прямым порядком байтов и на практике могут считаться с прямым порядком байтов.

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

[ редактировать ]

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

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

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

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

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

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

Архитектура ARM поддерживает два режима с прямым порядком байтов, называемые BE-8 и BE-32 . [27] Процессоры до 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 ), [28] который извлекает слово в формате с прямым порядком байтов из памяти или записывает слово в память в формате с прямым порядком байтов. В остальном эти процессоры полностью придерживаются прямого порядка байтов.

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

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

Плавающая точка

[ редактировать ]

Хотя многие процессоры используют хранилище с прямым порядком байтов для всех типов данных (целые, с плавающей запятой), существует ряд аппаратных архитектур, в которых числа с плавающей запятой представлены в форме с прямым порядком байтов, а целые числа представляются в форме с прямым порядком байтов. [29] Существуют процессоры ARM , которые имеют представление чисел с плавающей запятой со смешанным порядком байтов для чисел двойной точности: каждое из двух 32-битных слов сохраняется с прямым порядком байтов, но самое старшее слово сохраняется первым. VAX с плавающей запятой хранит 16-битные слова с прямым порядком байтов в порядке с прямым порядком байтов. Поскольку существовало множество форматов с плавающей запятой, для которых не было представления в стандарте сети, стандарт XDR использует в качестве представления IEEE 754 с прямым порядком байтов. Поэтому может показаться странным, что широко распространенный стандарт чисел с плавающей запятой IEEE 754 не определяет порядок байтов. [30] Теоретически это означает, что даже стандартные данные 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-битную систему с прямым порядком байтов. Инструкции по преобразованию между значениями с плавающей запятой и целыми числами в дополнительном процессоре с плавающей запятой PDP-11/45, PDP-11/70 и в некоторых более поздних процессорах хранят 32-битные целочисленные значения двойной точности с 16-битные половины поменялись местами в ожидаемом порядке с прямым порядком байтов. Компилятор UNIX C использовал тот же формат для 32-битных длинных целых чисел. Этот порядок известен как PDP-endian . [31]

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

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

Хранение 32-битного целого числа, 0x0A0B0C0D, он и PDP-11
смещение байта 8-битное значение 16-битное значение с прямым порядком байтов
0 0Bh 0A0Bh
1 0Ah
2 0Dh 0C0Dh
3 0Ch

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

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

[ редактировать ]

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

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

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

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

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

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

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

API сокетов Беркли : определяет набор функций для преобразования 16- и 32-битных целых чисел в сетевой порядок байтов и обратно htons (короткое замыкание хост-сеть) и htonl Функции (длиной от хоста к сети) преобразуют 16- и 32-битные значения соответственно из машинного ( хоста ) в сетевой порядок; тот ntohs и ntohl функции преобразуют сетевой порядок в хостовый. [38] [39] Эти функции могут быть неактивными в системе с прямым порядком байтов.

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

См. также

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