To give a concrete example around which to discuss endian format issues, consider writing code for a system that contains a DBDMA-like controller. The DMA code includes a descriptor format whose C definition might be as follows:
 
struct {
    UInt8       C;      // "command" byte
    UInt8       F;      // "flags"
    UInt16      L;      // "length" (count)
    UInt32      A;      // "address"
    UInt64      X;      // "field64"
        }       DMA_Descriptor;
A compiler would assign offsets to the fields of the descriptor as follows:
 
C       0
F       1
L       2
A       4
X       8
Consider the diagram in Figure A-1, which presents the layout of the descriptor in a format that is neither big-endian nor little-endian. In Figure A-1, the numbers represent byte offsets to the descriptor's fields.
Figure A-1 Neutral descriptor layout
In Figure A-1 the byte offsets are associated with the "beginning" of each field. As discussed in the next sections, the primary difference between big-endian and little-endian addressing has to do with what is defined as the "beginning" of a field.