엔디안(Endianness)
- 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법.
- 바이트를 배열하는 방법은 바이트 순서(Byte Order)라고 한다.
엔디안의 종류
- 빅 엔디안, 리틀 엔디안, 바이 엔디안, 미들 엔디안 방식이 존재하며
빅 엔디안은 최상위 바이트(MSB - Most Significant Byte) 부터 차례로 저장하는 방법이고
리틀 엔디안은 최하위 바이트(LSB - Least Significant Byte) 부터 차례로 저장하는 방법이다.
그리고 바이 엔디안은 빅 엔디안과 리틀 엔디안 중 하나를 선택하는 방식을 이야기한다.
미들 엔디안은 한 방향으로 순서가 정해져 있는게 아니라, 32비트 정수가 2바이트 단위(16비트)로는 빅 엔디안으로 그 안
에서 1바이트 단위로는 리틀 엔디안인 방식이다.
리틀 엔디안과 빅 엔디안
이 중에서 자주 접하게 되는 두 개념인 리틀 엔디안과 빅 엔디안 방식을 간략하게 예를 들어 설명해보면
예시) 데이터 : 0x12345678를 저장할 때
빅 엔디안 : 0x12 0x34 0x56 0x78 순서대로 메모리에 저장하고
리틀 엔디안 : 0x78 0x56 0x34 0x12 순서대로 메모리에 저장한다.
오늘날 x86 아키텍처를 사용하는 대부분의 데스크톱 컴퓨터는 리틀 엔디안을 사용하며 이를 '인텔 포맷' 이라 한다.
거꾸로 네트워크에서는 주소를 빅 엔디언으로 쓰는데, 역사적으로 라우팅이 전화를 거는 식으로 접두 부호로 이루어졌기
때문이다.
리틀 엔디안과 빅 엔디안의 차이
빅 엔디안은 사람이 숫자를 읽고 쓰는 방법과 같기 때문에 소프트웨어의 디버그를 편하게 해주는 경향이 있으며
리틀 엔디안은 메모리에 저장된 값의 하위 바이트들만 사용할 때 별도의 계산이 필요 없다는 장점이 있다. 4바이트 중에서
앞의 두 바이트 또는 한 바이트만 떼어내면 바로 하위 1 또는 2바이트를 바로 얻을 수 있다.
일반적으로 인텔 프로세서에서는 리틀 엔디안 방식을 사용하지만 네트워크 데이터 전송 과정에서는 빅 엔디안 방식을 사
용하기 때문에 데이터를 전송할 때는 전송하고자 하는 데이터를 빅 엔디안으로 변경해주어야 한다.
두 값을 비교할 때는 빅 엔디안이 유리하다. 비교는 가장 큰 값이 들어가는 왼쪽부터 하게 되는데, 빅 엔디안은 숫자 앞에서
부터, 리틀엔디안은 숫자 뒤에서부터 스택에 집어넣기 때문이다.
수치를 계산할 때는 리틀엔디안이 유리하다. 두 숫자를 계산할 때는 가장 낮은 자리의 숫자를 계산하고 올림수가 있는지 판
단하고 나서 다음 윗자릿수의 계산을 수행하기 때문이다.
빅 엔디안은 UNIX의 RISC 프로세서 또는 네트워크에서 사용하는 바이트 오더이고, 리틀 엔디안은 intel 계열의 프로세서
에서 주로 사용하는 바이트 오더이다.