Little Endian / Big EndianLittle Endian / Big Endian
Posted at 2013. 4. 7. 20:11 | Posted in 1학기/IT창의공학Big/Little Endian
8비트 단위의 데이터 저장 방식에 따른 차이점이며 PC도 마찬가지이지만
인텔계열의 CPU에서는 메모리에 여러 바이트의 내용을 저장할 때, 하위
바이트가 먼저 오고 상위바이트 일수록 뒤에 오는 Little Endian방식을
따른다.
모토로라 계열의 CPU처럼 가장 상위 바이트가 먼저오는 방식은
Big Endian이라고 한다. Big은 Litte과는 반대로 상위 어드레스에 하위
데이터 하위 어드레스에 상위 데이터가 저장된다. 해당 설정은 ARM7이
구현된 칩에 따라 다르지만, 보통 칩 외부에서 핀 입력에 의해 모드가
결정된다. 삼성반도체의 ARM 관련 프로세스는 초기에는 Big Endian만
지원했지만 현재는 Big/Little 둘 다 지원되고 있다. ARM7은 외부핀에
의해 결정되지만 ARM9은 내부 프로그램에 의해 결정된다. Endian 방식을
Application 프로그램 운영 중에 바꾸면 정상동작을 보장받을 수 없으며
비트 단위로 바꾸고자 할 경우는 1바이트씩 Byte Ordering Swap
(0~7<->24~31, 8~15<->16~23)해야 한다. 예를 들어 1바이트 메모리에
다음과 같이 저장되어 있고 이를 4바이트로 두 가지 방법으로 읽어
올 경우 다음과 같다.
100번지 = 0x78
101번지 = 0x56
102번지 = 0x34
103번지 = 0x12
Big Endian 방법 읽기
0x78563412
Little Endian 방법 읽기
0x12345678
1. 빅엔디안
- 주로 UNIX를 사용하는 RISC 프로세서 계열에서 사용하는 바이트 오더
- 네트워크 프로토콜에서 표준으로 사용하는 바이트 오더
- 메모리 시작 주소에 상위 바이트 부터 기록
ex)
4바이트(32bit)값 0x01020304를 빅엔디안 순서로 메모리에
입력되는 과정을 보면 다음과 같다.
=>그림을 보면 네모 한칸이 각각 메모리 한 번지를 의미하며,하위 주소에서 상위 주소로 주소 번지가 증가함을 의미한다.
하위주소 즉 시작 주소에 0x01020304 값중 가장 상위바이트인 0x01을 넣고, 다음 주소에 각각 하위바이트 값들을 넣어준다.
TIP:네트워크 프로토콜에서는 바이트 오더(순서)로 빅엔디안을 따르도록 하고 있으므로,
흔히 Intel계열 프로세서를 사용하는 PC환경에서는 리틀엔디안->빅엔디안 또는
빅엔디안->리틀엔디안 변경 처리를 잘 해주어야만 한다.
(htonl, ntohl, inet_addr 등 주로 사용)
2. 리틀엔디안
- 주로 Intel 프로세서 계열에서 사용하는 바이트 오더
- 메모리 시작 주소에 하위 바이트부터 기록
ex)4바이트(32bit)값 0x01020304를 리틀엔디안 순서로 메모리에
입력되는 과정을 보면 다음과 같다.
=> 그림을 보면 네모 한칸이 각각 메모리 한 번지를 의미하며,하위 주소에서 상위 주소로 주소 번지가 증가함을 의미한다.
하위주소(낮은주소) 즉, 시작 주소에 0x01020304 값 중에 가장 하위바이트인 0x04를 넣어주고 그 다음 상위바이트로 올라가면서 다음 주소번지에 값을 채워넣는다.
[출처] Big/Little Endian|작성자 brokenmagnum