O endianness é sobre dados numéricos quando um número é grande demais para caber em um byte. Por exemplo. Texto ASCII é apenas um byte seguido, não preocupado com o endianness.
Se colocarmos um número pequeno como 42 em um inteiro de 32 bits (4 bytes), vemos que com big endian (BE) é usado apenas o último byte e com little endian (LE) apenas o primeiro byte é usado :
| | byte[0] | byte[1] | byte[2] | byte[3] |
|----+---------+---------+---------+---------|
| BE | 0 | 0 | 0 | 42 |
| LE | 42 | 0 | 0 | 0 |
Endianness de arquitetura é o endianness da CPU. A RAM não faz matemática, por isso não importa.
Dispositivos como placas de som se importam (por exemplo, áudio de 16 bits a 44100kHz é principalmente BE), mas é responsabilidade do sistema operacional (driver de dispositivo) dizer à CPU para talvez converter o endianness antes de enviar para a placa de som. / p>
Em redes, a maior parte é big endian , portanto, o sistema operacional tem que informar processadores little endian para byte swap inteiros como pacotes de rede são construídos. Os sistemas de arquivos vêm em ambos os endiannesses. Por exemplo. FAT32 é LE, portanto, apenas as arquiteturas BE precisam fazer byte ao usar FAT32. Na programação de rede C, você deve se lembrar de usar Arquitetura endianness é uma coisa de nível de bytes. A ordem / numeração de bits é praticamente irrelevante quando se considera o endianness da arquitetura. MAS é sempre bom saber:) O LSB (Least Significant Bit) primeiro é o LE do bit world e o MSB (Most Significant Bit) primeiro é o BE do mundo bit. A maioria dos barris de CPU e de série parece ser (surpreendentemente) LSB mesmo em sistemas big endian como o SPARC. Além disso, a Ethernet é LSB, apesar de os bytes serem em grande parte endianos. Por outro lado, por exemplo PPC é big endian e MSB primeiro. htonl()
e ntohl()
-functions para converter entre ordem de byte host (nativa) e de rede. Quando o programa é compilado em um sistema big endian, as funções não fazem nada. Nos sistemas little endian eles trocam ordem de bytes.