I must write a routine for conversion between the 2 representations. But I\'m a bit confused. If I have an architecture with a memory with words of 32 bits and I must store the
Big-endian memory layout is most significant bytes first, whereas little-endian layout is least significant bytes first. Given the value 0xA15D23B1:
Memory address 0 1 2 3
Big-endian A1 5D 23 B1
Little-endian B1 23 5D A1
Note that big-endian memory layout does not change with respect to word size, but little-endian does. If you consider two short words (16 bit), 0xA15D and 0x23B1 stored contiguously:
Memory address 0 1 2 3
Big-endian A1 5D 23 B1
Little-endian 5D A1 B1 23
No. In little-endian it's 23
There are various ways that processors implement big-endian and little-endian — for a detailed discussion, consult the Wikipedia article on Endianness.
For a 2-byte quantity, there are just two options:
Value: 0x1234 (MSB = 0x12, LSB = 0x34)
Little-endian: LSB then MSB 0x34 0x12 — Intel, …
Big-endian: MSB then LSB 0x12 0x34 — SPARC, PowerPC, …
For a 4-byte quantity, there are more options, but there are still two primary ones (plus a historical curiosity):
Value: 0x12345678 (MSB = 0x12, NMSB = 0x34, NLSB = 0x56, LSB = 0x78)
Little-endian: LSB, NLSB, NMSB, MSB 0x78 0x56 0x34 0x12
Big-endian: MSB, NMSB, NLSB, LSB 0x12 0x34 0x56 0x78
PDP-11: NMSB, MSB, NLSB, LSB 0x34 0x12 0x78 0x56
Note that a number of modern chip sets are bi-endian — can be switched to run in big-endian or little-endian mode:
Some architectures (including ARM versions 3 and above, PowerPC, Alpha, SPARC V9, MIPS, PA-RISC, SuperH SH-4 and IA-64) feature a setting which allows for switchable endianness in data segments, code segments or both.
A good way to remember "which is which":
Big-endian starts from the big (most-significant) end; little endian starts from the little end.
For example, when regarding the word 0xA15D23B1 as a sequence of bytes, a big-endian machine starts it from the most significant byte 0xA1. It will be stored at the lowest address (this is the meaning of the potentially confusing word "start").
By the way, if you only want to convert from big-endian to little-endian or back, you don't have to understand this: just reverse the order of bytes! This is why many people don't bother to understand what "big-endian" or "little-endian" means - you generally only need to understand whether or not to swap bytes.