When an integer or any other data is represented with multiple bytes, the actual ordering of those bytes in memory, or the sequence in which they are transmitted over some medium, is subject to convention. This is similar to the situation in written languages, where some are written left-to-right, while others are written right-to-left. The convention is called endianness, describing the method either big-endian or little-endian. Endianness is also referred to as byte sex.

Table of contents
1 Endianness in computers
2 Endianness in communications
3 Endianness, software, and portability
4 Discussion, background
5 External links

Endianness in computers

When some computers store a 32-bit integer value in memory, for example 0xDEADBEEF, they store it as bytes in the following order: DE AD BE EF, that is, most significant byte first (that is to say, most significant byte is stored at the lowest byte address in store within this word).

Architectures that follow this rule are called big-endian and include Motorola 68000 and SPARC.

Other computers store 0xDEADBEEF as EF BE AD DE, that is, least significant byte first. Architectures that follow this rule are called little-endian and include the MOS Technologies 650x and Intel x86.

Some architectures can be configured either way; these include ARM, PowerPC and MIPS. The word bytesexual, said of hardware, denotes willingness to compute or pass data in either big-endian or little-endian format (depending, presumably, on a mode bit somewhere).

Still other (generally older) architectures, called middle-endian, may have a more complicated ordering such that the bytes within a 16-bit unit are ordered differently from the 16-bit units within a 32-bit word. For instance, BE EF DE AD.

Endianness in communications

In general, the NUXI problem is the problem of transferring data between computers with differing byte order. For example, the string "UNIX" might look like "NUXI" on a machine with a different "byte sex". The problem is caused by the difference in endianness.

The Internet Protocol defines a standard "big-endian" network byte order, where binary values are in general encoded into packets, and sent out over the network, most significant byte first. This occurs regardless of the native endianness of the host CPU.

Serial devices also have bit-endianness: the bits in a byte can be sent little-endian (least significant bit first) or big-endian (most significant bit first). This decision is made in the very bottom of the data link layer of the OSI model.

Endianness, software, and portability

Endianness has implications in software portability. For example, in interpreting data stored in binary format and using an appropriate bitmask, the endianness is important because different endianness will lead to different results from the mask.

Writing binary data from software, to a common format, leads to a concern of the proper endianness of the storing of data in order for to maintain the integrity of the data stored in that format. For example saving data in the BMP bitmap format requires little endian integers - if the data is stored using big endian integers then the data may be corrupted since it does not match the format.

The OPENSTEP operating system, due to its portable nature, has software that swaps the bytes of integers and other C datatypes in order to preserve the correct endianness since software running on OPENSTEP for PA-RISC is intended to be portable for software running on OPENSTEP for Mach/i386.

Discussion, background

Big-endian numbers are easier to read when debugging a program but less intuitive (because the high byte is at the smaller address); similarly little-endian numbers are more intuitive but harder to debug. The choice of big-endian vs. little-endian for a CPU design has begun a lot of flame wars. Emphasizing the futility of this argument, the very terms big-endian and little-endian were taken from the Big-Endians and Little-Endians of Jonathan Swift's Gulliver's Travels, two peoples in conflict over which end to crack an egg in the voyage to Lilliput and Blefuscu.

See the Endian FAQ (external link, below), including the significant essay "On holy wars and a plea for peace" by Danny Cohen (1980).

  • Processor families that use big-endian storage: SPARC, Motorola 68000, IBM 370
  • Processor families that use little-endian format: x86, VAX
  • Processor families that use either (determined by software): MIPS, DEC Alpha, PowerPC
  • The PDP family of processors, which were word- rather than byte-addressable, used the unusual pattern of B-A-D-C (that is, byte-swap within words).

External links


Parts of this article were originally based on material from FOLDOC, used with permission.