Endianness
Posted August 19, 2008 at 3:56 pm in ProgrammingEndianness is the attribute of a system that indicates whether integers are represented from left to right or right to left, just like human languages. This may sound odd but if you’ve ever tried to read a book in English and another book in Japanese, you’ll notice that one flows from left to right and another from right to left. If you tried to read the book in Japanese from left to right, you would spend a lot of time attempting to decipher what that book was about.
There are two types of endianness, big and little. Big endian representation is in the left to right fashion and has the left most byte set as the most significant byte (MSB) in a multibyte integer. A simple example is the real number 200. The 2 on the left side indicates that this number is much larger than the number 100. We often learn the binary number system in big endian representation. Little endian representation is in the right to left fashion and has the right most byte set as the most significant byte in a multibyte integer.
Big endian most significant byte of any multibyte data field is stored at the lowest memory address. Little endian means that the least significant byte of any multibyte data field is stored at the lowest memory address.
An easy way to remember these is to think about input to a device. A big endian implementation would require the “big end” (MSB) first while a little endian implementation would require the “little end” first.
Endianness is important to processors as they attempt to read binary data from memory. Intel’s 80×86 is a common little endian processor. Sun’s Java Virtual Machine uses a big endian representation. Endianness is also important to network stacks and the communication field in general. Communicating devices must use the same endian implementation or they will not be able to communicate.
All of the protocols in the TCP/IP suite are big endian and as such, big endian is also known as Network Byte Order which requires the MSB first. Specifically, sin_port and sin_addr members of the sockaddr_in structure must use the big endian implementation when creating network sockets.
Commentary