Порядок следования байтов

Порядок следования байтов

Порядок следования байтов (byte ordering) — это порядок, согласно которому байты расположены в машинном слове. Для разных процессоров может использоваться один из двух типов нумерации байтов в машинном слове: наименее значимый (самый младший) байт является либо самым первым (самым левым, left-most), либо самым последним (самым правым, right-most) в слове. Порядок байтов называется обратным (big-endian), если наиболее значимый (самый старший) байт хранится первым, а за ним идут байты в порядке убывания значимости. Порядок байтов называется прямым (little-endian), если наименее значимый (самый младший) байт хранится первым, а за ним следуют байты в порядке возрастания значимости.

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

На рис. 19.1 показан пример обратного порядка следования байтов, а на рис. 19.2 — прямого порядка следования байтов.

Рис. 19.1. Обратный (big-endian) порядок следования байтов

Рис. 19.2. Прямей (little-endian) порядок следования байтов

Аппаратная платформа i386 использует прямой (little-endian) порядок байтов. Большинство других аппаратных платформ обычно использует обратный (big-endian) порядок.

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

00000000 00000000 00000100 00000011

Внутренние представления этого числа в памяти при использовании прямого и обратного порядка байтов отличаются, как это показано в табл. 19.3.

Таблица 19.3. Расположение данных в памяти для разных порядков следования байтов

Адрес Обратный порядок Прямой порядок
0 00000000 00000011
1 00000000 00000100
2 00000100 00000000
3 00000011 00000000

Обратите внимание на то, что для аппаратной платформы с обратным порядком байтов самый старший байт записывается в самый минимальный адрес памяти.

И наконец, еще один пример — фрагмент кода, который позволяет определить порядок байтов для той аппаратной платформы, на которой он выполняется.

int x = 1;

if (*(char*)&x == 1)

 /* прямой порядок */

else

 /* обратный порядок */

Этот пример работает как в ядре, так и в пространстве пользователя.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

24. Хаос и порядок

Из книги Человеческий фактор [Успешные проекты и команды] автора Листер Тимоти


3.2.2 Порядок вычисления

Из книги C++ автора Хилл Мюррей

3.2.2 Порядок вычисления Порядок вычисления подвыражений в выражении неопределен. Напримерint i = 1; v[i] = i++;может вычисляться или как v[1]=1, или как v[2]=1. При отсутствии ограничений на порядок вычисления выражения может генерироваться более хороший код. Было бы замечательно, если


20.3.1. Unix-файл представляет собой только большой блок байтов

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

20.3.1. Unix-файл представляет собой только большой блок байтов Любой файл в Unix представляет собой только большой блок байтов без каких-либо других атрибутов. В частности, не существует возможности сохранять за пределами данных файла информацию о его типе или указатель на


Сколько байтов адресуют 64 разряда

Из книги Основы AS/400 автора Солтис Фрэнк

Сколько байтов адресуют 64 разряда Ответ: 16 экзабайтов, что равно примерно 18,4 квинтиллионам байтов (или точнее 18 446 744 073 709 551 616 байтов).Большинство людей не в состоянии представить себе такое число. Как я уже упоминал, число байтов, которые могут быть адресованы с помощью 48


20.3.1. Unix-файл представляет собой только большой блок байтов

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

20.3.1. Unix-файл представляет собой только большой блок байтов Любой файл в Unix представляет собой только большой блок байтов без каких-либо других атрибутов. В частности, не существует возможности сохранять за пределами данных файла информацию о его типе или указатель на


20.6.2 Лексикографический порядок

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

20.6.2 Лексикографический порядок Переменные в MIB упорядочены лексикографически. Для сравнения двух идентификаторов:1.3.6.1.2.1.2.2.1.19.31.3.6.1.2.1.2.2.1.21.2нужно выполнить:? Начать слева.? Сравнивать значения, пока не будет найдено первое отличие.? Число с большим значением определяет


Порядок импорта

Из книги Технология XSLT автора Валиков Алексей Николаевич

Порядок импорта Как уже было сказано выше, элементы xsl:import должны всегда быть первыми дочерними элементами xsl:stylesheet. Порядок, в котором они находятся в преобразовании, определяет порядок импорта внешних модулей следующим образом.? Порядок импорта основного


Порядок следования узлов

Из книги OrCAD PSpice. Анализ электрических цепей автора Кеоун Дж.

Порядок следования узлов В качестве дополнительного упражнения удалите графики с экрана Probe и получите график V(L1:1)=0,8 В, VR(L1:1)=0,64 В и VI(L1:1)=0,48 В при f=60 Гц. Теперь удалите эти графики и получите график VP(L1:1)=36,9. На рисунке, созданном в Capture, катушка индуктивности была три раза


§ 84. Сколько байтов в килобайте?

Из книги Ководство автора Лебедев Артём Андреевич

§ 84. Сколько байтов в килобайте? Алиса. Меня зовут Алиса? Шалтай-Болтай. Какое глупое имя! Что оно значит? Алиса. Разве имя должно что-то значить? Шалтай-Болтай. Конечно, должно! Возьмем, к примеру, мое имя — оно выражает мою суть! Замечательную чудесную суть! А с таким именем,


17.5.1. Упорядочение байтов

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

17.5.1. Упорядочение байтов Сети TCP/IP, как правило, являются неоднородными; они включают в себя широкий ряд механизмов и архитектур. Одно из основных отличий между архитектурами связано со способом хранения чисел.Машинные числа составляются из последовательности байтов.


Оптимальный порядок

Из книги CSS3 для веб-дизайнеров автора Сидерхолм Дэн

Оптимальный порядок Используя браузерные префиксы, важно не забывать о порядке, в котором перечисляются свойства. Можно заметить, что в предыдущем примере сначала написаны префиксные свойства, за которыми следует беспрефиксное свойство.Зачем ставить подлинное


Ограничение частоты следования событий при отладке

Из книги Разработка ядра Linux автора Лав Роберт

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


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

Из книги QT 4: программирование GUI на С++ автора Бланшет Жасмин

Порядок байтов в ядре Для каждой аппаратной платформы, которая поддерживается ядром Linux, в файле <asm/byteorder.h> определена одна из двух констант __BIG_ENDIAN или __LITTLE_ENDIAN, в соответствии с используемым порядком байтов.В этот заголовочный файл также включаются макросы из