엔디언
IT 위키
더 많은 작업
- Endianness; 바이트 순서
- 여러 바이트로 이루어진 값을 메모리에 저장할 때 어느 바이트를 앞 주소에 두는가를 정하는 방식
32비트 값 0x12345678 을 주소 0x100 부터 저장한다고 하자.
| 주소 | 빅 엔디언 | 리틀 엔디언 |
|---|---|---|
| 0x100 | 12 | 78 |
| 0x101 | 34 | 56 |
| 0x102 | 56 | 34 |
| 0x103 | 78 | 12 |
- 빅 엔디언(Big Endian) — 최상위 바이트를 낮은 주소에 둔다. 사람이 숫자를 쓰는 순서와 같다
- 리틀 엔디언(Little Endian) — 최하위 바이트를 낮은 주소에 둔다
이름은 조너선 스위프트의 걸리버 여행기에서 달걀을 뭉툭한 쪽(big end)으로 깨느냐 뾰족한 쪽(little end)으로 깨느냐를 두고 다투는 이야기에서 따왔다.
서로 다른 엔디언을 쓰는 시스템끼리 이진 데이터를 그대로 주고받으면 값이 뒤집혀 읽힌다.
그래서 네트워크로 내보낼 때는 호스트 순서를 네트워크 순서로 바꾸고(htons, htonl),
받을 때는 되돌린다(ntohs, ntohl).
파일 형식도 엔디언을 명시하거나 앞부분에 표식을 두어 구분한다.
엔디언은 바이트 단위의 순서이고, 바이트 안의 비트 순서와는 별개다.