Иллюстрированный самоучитель по практике программирования

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

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

По крайней мере один вопрос решен: все современные машины имеют! 8-битовые байты. Однако все объекты, большие байта, представляются на разных машинах по-разному, поэтому полагаться на какие-то определенные свойства было бы ошибкой. Короткие целые числа (обычно] 16 битов, или 2 байта) могут иметь младший байт, расположенный как по меньшему адресу (little-endian, младшеконечное расположение), чем старший, так и по большему (big-endian, старшеконечное)1. Выбор варианта произволен, а некоторые машины вообще поддерживают обе! модели.

Итак, несмотря на то, что и старшеконечные и младшеконечные машины рассматривают память как последовательность слов, расположен-! ных в одном и том же порядке, байты внутри слова они интерпретируют! различно. На приведенной диаграмме четыре байта, начинающиеся с позиции 0, представляют шестнадцатеричное целое 0x11223344 для старшеконечников и 0x44332211 – для младшеконечников.

Иллюстрированный самоучитель по практике программирования › Переносимость › Порядок байтов

Для того чтобы увидеть порядок байтов в действии, запустите следующую программу:

Иллюстрированный самоучитель по практике программирования › Переносимость › Порядок байтов

Иллюстрированный самоучитель по практике программирования › Переносимость › Порядок байтов

На 32-битовом старшеконечнике на экран будет выведено:

11 22 33 44

На младшеконечнике:

44 33 22 11

А на PDP-11 (16-битовая машина, все еще встречающаяся во встроенных системах) результатом будет:

22 11 44 33

На машинах с 64-битовым типом long мы можем рассмотреть константу большей длины и увидеть те же результаты.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.