Skip to content

Byte Ordering: Little Endian and Big Endian

Jonathan Swift의 걸리버 여행기의 소인국에서 삶은 달걀을 깰 때,
상대적으로 둥근 쪽(big end)과 날카로운 쪽(little end) 중
어느 쪽으로 깨는지에 따라 big endian과 little endian으로 나뉘어 대립하는 것에 유래됨.

memory에서 byte 단위로 읽고 쓰여지는데, memory에 데이터를 저장할 때의 byte의 순서가 다음의 두 가지 종류가 있음.


1. Little Endian

Intel CPU 에서 사용됨.

Word의 Most Significant Byte(MSB, 상위바이트)가 가장 높은 주소(상위주소)에 저장됨.

Little endian에서 MSB(상위바이트)는 그림으로 표기시 가장 오른쪽에 위치 함.

  • 연산에서 유리함
  • 낮은 자리의 수가 메모리에서 낮은 주소에 있으므로 연산시 낮은 주소에서 높은 주소로 진행.

1-1. Example

크기로 4바이트를 가지는 값 0x12345678
"8bit(=1byte)의 memory word 4개"를 붙여 만든 32bit 크기의 Word
little endian 으로 저장한다면 다음과 같음.

memory address 0x8001 0x8002 0x8003 0x8004
value (hex) 0x78 (LSB) 0x56 0x34 0x12 (MSB)
value (bin) 0111 1000 0101 0110 0011 0100 0001 0010
  • 1byte 내에서는 순서가 바뀌지 않는 점 을 유의할 것.

2. Big Endian

Motorola CPU (주로 unix가 설치된 RISC 시스템의 CPU)에서 사용됨.

Word의 Most Significant Bytes(MSB, 상위바이트)는 가장 낮은 주소(시작주소)에 저장됨.

Network Byte Ordering 으로 네트워크에서 전송시 표준으로 사용됨.

사실 Endian (or Byte Ordering)은 이기종간의 통신에서 중요성을 가짐.
Intel CPU와 Network Byte Ordering이 다르므로 이를 주의할 것.

  • 네트워크 전송 이나 메모리의 값을 직접 읽어들일 때 직관적임.

2-1. Example

크기로 4바이트를 가지는 값 0x12345678
"8bit(=1byte)의 memory word 4개"를 붙여 만든 32bit 크기의 Word
big endian으로 저장한다면 다음과 같음

memory address 0x8001 0x8002 0x8003 0x8004
value (hex) 0x12 (MSB) 0x34 0x56 0x78 (LSB)
value (bin) 0001 0010 0011 0100 0101 0110 0111 1000

3. Term : nuxi syndrome

16bit Word를 사용하던 시절의 일화 (=ascii로 생각하면 2글자가 1word로 묶여서 저장됨)

UNIX OS를 PDP-11 (big-endian)에서 IBM Series/1(little-endian)로 porting할 때 byte ordering에 문제가 발생한 사건에서 유래된 용어.

byte ordering과 관련된 문제를 가르키는 용어.

해당 사건은 영문은 한 글자가 1byte로 unix 를 출력하는 프로그램이 byte ordering이 잘못되어 nuxi 라고 출력한 것임 (word가 2byte라 두 글자가 한 워드임.)


Note

MSB 는 보통 Most Significant Byte 보다 Most Significant Bit 로 더 많이 사용됨.

이 글에서는 바이트 단위로 표시하려고 전자를 취함.


References