Я бы сказал, что это не столько выиграл, сколько перестал иметь значение. ARM, который составляет в основном весь рынок мобильной связи, является bi-endian (о, ересь!). В том смысле, что x86 в основном «выиграл» на рынке настольных компьютеров, я думаю, вы могли бы сказать, что выиграл little endian, но я думаю, учитывая общую глубину кода (мелкую) и абстракцию (много) многих современных приложений, это гораздо меньше проблем, чем это было. Я не помню, чтобы в моем классе по компьютерной архитектуре действительно появлялся порядок байтов.
Я подозреваю, что многие разработчики даже не знают о порядке байтов или почему это важно. Потому что для подавляющего (и я имею в виду, подавляющего большинства) это совершенно не имеет отношения к их повседневной рабочей среде. 30 лет назад все было по-другому, когда все кодировали гораздо ближе к металлу, а не манипулировали текстовыми файлами на экране причудливыми и драматическими способами.
Мое общее подозрение состоит в том, что объектно-ориентированное программирование было началом конца заботы об обратном порядке, поскольку уровни доступа и абстракции в хорошей ОО-системе скрывают детали реализации от пользователя. Поскольку реализация включает в себя порядок байтов, люди привыкли, что это не явный фактор.
Приложение: zxcdw упомянул переносимость как проблему. Что же произошло с местью за последние 20 лет? Языки программирования построены на виртуальных машинах. Конечно, порядковый номер виртуальной машины может иметь значение, но он может быть сделан очень согласованным для этого одного языка до такой степени, что это в основном не проблема. Только разработчикам виртуальных машин даже придется беспокоиться о порядке байтов с точки зрения переносимости.
x & 0xFF
всегда дает вам наименее значимый байт независимо от порядка байтов (при условии, что ваши байты равны 8 битам каждый), потому что вы задали интересующие вас биты по их значению, не их относительное положение в памяти.Endians имеет значение только при передаче двоичных систем данных.
С повышением скорости процессора (и гораздо более низкой стоимостью хранения) интерфейсы двоичных данных становятся все более редкими, поэтому вы не замечаете их на уровне приложений. Вы используете либо текстовый формат передачи (XML / JSON), либо вы используете абстракцию уровня данных, которая позаботится о переводе (так что вы даже не заметите, что есть перевод).
Но когда вы кодируете на уровне двоичных данных, вы это замечаете, и это очень важно. Например, когда я работал в VERITAS (сейчас Symantec), я создавал программное обеспечение, которое создавалось на 25 различных аппаратных платформах (не только big / little endian, но и другие типы).
источник
(char) (x & 0xFF)
в C дает вам младший байт независимо от порядка байтов, предполагая только, что байт равен 8 битам. Я разработал двоичные форматы файлов, не зная машин, на которых будет работать программное обеспечение - я в основном выбрал порядок байтов для формата файлов, не заботясь об аппаратном обеспечении.Нет, никто не победил. Мы, как вид, не сумели стандартизировать порядок, в котором мы храним наши байты, а также направление, которое мы пишем, и сторону улицы, по которой мы едем.
Как следствие, любой, кто хочет передавать данные между двумя разными системами по сети или в файле, имеет всего лишь около 50% вероятности того, что разумная начальная версия их кода дампа данных будет правильной в их среде, и даже если она работает , имеет 50% шанс работать в своих клиентов.
Чтобы справиться с этим, вам нужно поискать специфичные для платформы функции с именами, такими как «htonl», в заголовках с именами, явно восходящими к 70-м годам, например, «arpa / inet.h», потому что с тех пор ситуация не улучшилась и, вероятно, никогда не улучшится. ,
источник
Все еще нет единого мнения:
На аппаратном уровне LE встречается гораздо чаще. Но:
Оба заказа будут с нами в обозримом будущем.
источник