본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Endianness; 바이트 순서
여러 바이트로 이루어진 값을 메모리에 저장할 때 어느 바이트를 앞 주소에 두는가를 정하는 방식

32비트 값 0x12345678 을 주소 0x100 부터 저장한다고 하자.

주소 빅 엔디언 리틀 엔디언
0x100 12 78
0x101 34 56
0x102 56 34
0x103 78 12
  • 빅 엔디언(Big Endian) — 최상위 바이트를 낮은 주소에 둔다. 사람이 숫자를 쓰는 순서와 같다
  • 리틀 엔디언(Little Endian) — 최하위 바이트를 낮은 주소에 둔다

이름은 조너선 스위프트의 걸리버 여행기에서 달걀을 뭉툭한 쪽(big end)으로 깨느냐 뾰족한 쪽(little end)으로 깨느냐를 두고 다투는 이야기에서 따왔다.

어디에 쓰이나

편집 원본 편집
  • 리틀 엔디언 — x86, x86-64 계열 CPU
  • 빅 엔디언 — 과거의 모토로라 68000, SPARC 계열
  • 바이 엔디언 — ARM, PowerPC, MIPS 처럼 설정으로 고를 수 있는 것
  • 네트워크 바이트 순서는 빅 엔디언이다. TCP·UDP 헤더의 포트 번호와 주소가 여기에 해당한다

왜 문제가 되나

편집 원본 편집

서로 다른 엔디언을 쓰는 시스템끼리 이진 데이터를 그대로 주고받으면 값이 뒤집혀 읽힌다. 그래서 네트워크로 내보낼 때는 호스트 순서를 네트워크 순서로 바꾸고(htons, htonl), 받을 때는 되돌린다(ntohs, ntohl). 파일 형식도 엔디언을 명시하거나 앞부분에 표식을 두어 구분한다.

엔디언은 바이트 단위의 순서이고, 바이트 안의 비트 순서와는 별개다.