Eu diria que não é tanto ganho como deixou de importar. O BRAÇO que compõe basicamente todo o mercado móvel é bi-endiano (ah, a heresia!). No sentido em que o x86 basicamente "venceu" o mercado de desktop, suponho que você poderia dizer que o little endian venceu, mas acho que, dada a profundidade geral do código (superficial) e a abstração (lotes) de muitos dos aplicativos atuais, é muito menos um problema do que costumava ser. Não me lembro de endianness realmente surgindo na minha aula de Arquitetura de Computadores.
Suspeito que muitos desenvolvedores nem estejam cientes da existência ou por que é importante. Porque para a vasta (e eu digo vasta ) maioria é totalmente irrelevante para o ambiente de trabalho diário. Isso foi diferente 30 anos atrás, quando todo mundo estava codificando muito mais perto do metal, em vez de manipular arquivos de texto em uma tela de maneiras extravagantes e dramáticas.
Minha suspeita geral é que a Programação Orientada a Objetos foi o começo do fim de se preocupar com endianness, uma vez que as camadas de acesso e abstração em um bom sistema OO ocultam os detalhes da implementação do usuário. Como a implementação inclui endianness, as pessoas se acostumaram a não ser um fator explícito.
Adendo: o zxcdw mencionou a portabilidade como preocupação. No entanto, o que surgiu com uma vingança nos últimos 20 anos? Linguagens de programação criadas em máquinas virtuais. Certifique-se de que o endianness da máquina virtual possa ser importante, mas pode ser muito consistente para esse idioma até o ponto em que é basicamente um problema. Somente os implementadores de VM precisariam se preocupar com endianness do ponto de vista da portabilidade.
x & 0xFF
sempre fornece o byte menos significativo, independentemente da ordem endian (supondo que seus bytes tenham 8 bits cada), porque você especificou os bits nos quais está interessado por seu valor, não sua posição relativa na memória.Endians realmente importa apenas quando você está transferindo sistemas de dados binários.
Com o avanço da velocidade do processador (e um custo muito mais baixo de armazenamento), as interfaces de dados binários estão se tornando mais raras, para que você não as observe na camada de aplicação. Você está usando um formato de transferência de texto (XML / JSON) ou uma abstração da camada de dados que cuida da tradução para você (para que você nem perceba que há uma tradução).
Mas quando você está codificando na camada de dados binários, percebe e isso é muito importante. Por exemplo, quando eu trabalhei na VERITAS (agora na Symantec), eu estava criando um software que estava sendo construído em 25 plataformas de hardware diferentes (não apenas endian grande / pequeno, existem outros tipos).
fonte
(char) (x & 0xFF)
em C fornece o byte menos significativo, independentemente de problemas endian, assumindo apenas que um byte tenha 8 bits. Projetei formatos de arquivos binários sem conhecer as máquinas nas quais o software seria executado - basicamente escolhi uma encomenda endian para o formato de arquivo sem se preocupar com o hardware.Não, ninguém ganhou. Como espécie, falhamos em padronizar a ordem em que armazenamos nossos bytes, juntamente com a direção em que escrevemos e o lado da rua em que seguimos.
Como conseqüência, qualquer pessoa que queira transferir dados entre dois sistemas diferentes em uma rede ou em um arquivo, tem apenas cerca de 50% de chance da versão inicial razoável de seu código de descarte de dados estar correta em seu ambiente e, mesmo que funcione , tem 50% de chance de trabalhar no cliente.
Para lidar com isso, você precisa procurar funções específicas da plataforma com nomes como "htonl" em cabeçalhos com nomes que obviamente remontam aos anos 70 como "arpa / inet.h", porque a situação não melhorou desde então e provavelmente nunca será .
fonte
Ainda não há consenso:
Portanto, no nível do hardware, LE é muito mais comum. Mas:
Ambos os pedidos estarão conosco no futuro próximo.
fonte