빅엔디안,리틀엔디안 정리


메모리에서 바이트 저장 순서가 있는데 리틀엔디안과 빅엔디안 방법이 있다.
즉 리틀엔디안과 빅엔디안은 바이트가 메모리에 어떤 순서로 저장되냐? 를 나타낸다.


 1. 빅엔디안

- 주로 UNIX를 사용하는 RISC 프로세서 계열에서 사용하는 바이트 오더
- 네트워크 프로토콜에서 표준으로 사용하는 바이트 오더

- 메모리 시작 주소에 상위 바이트 부터 기록
ex)
4바이트(32bit)값 0x01020304를 빅엔디안 순서로 메모리에
입력되는 과정을 보면 다음과 같다.
 

 

 




=>그림을 보면 네모 한칸이 각각 메모리 한 번지를 의미하며,하위 주소에서 상위 주소로 주소 번지가 증가함을 의미한다.
 하위주소 즉 시작 주소에 
0x01020304 값중 가장 상위바이트인 0x01을 넣고, 다음 주소에 각각 하위바이트 값들을 넣어준다.


TIP:네트워크 프로토콜에서는 바이트 오더(순서)로 빅엔디안을 따르도록 하고 있으므로,
흔히 Intel계열 프로세서를 사용하는 PC환경에서는 리틀엔디안->빅엔디안 또는
빅엔디안->리틀엔디안 변경 처리를 잘 해주어야만 한다.
(htonl, ntohl, inet_addr 등 주로 사용)



2. 리틀엔디안

- 주로 Intel 프로세서 계열에서 사용하는 바이트 오더
- 메모리 시작 주소에 하위 바이트부터 기록

ex)4바이트(32bit)값
 
0x01020304를 리틀엔디안 순서로 메모리에
입력되는 과정을 보면 다음과 같다.
 






=> 그림을 보면 네모 한칸이 각각 메모리 한 번지를 의미하며,
하위 주소에서 상위 주소로 주소 번지가 증가함을 의미한다.
하위주소(낮은주소) 즉, 시작 주소에 0x01020304 값 중에 가장 하위바이트인 0x04를 넣어주고 그 다음 상위바이트로 올라가면서 다음 주소번지에 값을 채워넣는다.
 


출저:http://blog.naver.com/oioois/150037545305




추가적으로 정리하면

빅엔디안은 메모리에 나타난 순서대로 읽으니 자연스럽고 사람이 이해하기 편리하다!
리틀엔디안은 메모리에서 바이트를 읽을때 거꾸로 읽어야되서 아주 불편하지만 기계가 값을 다루기는 더 효율적이고 몇가지 연산에서 편리한 점이있다!

네트워크프로그래밍에서 바이트 저장방식
솔직히 따지고 얘기해서 이런 바이트 저장방식은 코딩에서 크게 중요하지않다.!
하지만 네트워크 프로그래밍에서 컴퓨터간의 네트워크 통신할때 엔디안을 맞추는 작업이 필요하다. 소켓은 기본적으로 빅엔디안으로 통일되어 있으므로, 인텔 계열 CPU는 보낼때 뒤집어 보내고 받은값도 뒤집어야 원래 값을 제대로 읽을수 있다.!





 빅 엔디안
(Big Endian:순워드) : 이 방식은 높은 자리수를 먼저 저장한다. 0x12가 가장 앞쪽 바이트에, 그리고 0x34가 그 다음 바이트에 저장되는 식이다. 모토롤라 계열의 CPU와 대부분의 RISC CPU가 이 방식을 사용한다. 사람들은 오랫동안 글을 읽을 때 왼쪽에서 오른쪽으로 읽어 왔으므로 읽는 순서에 맞게 4바이트를 나누어 저장한 것이다. 메모리에 나타난 순서대로 읽을 수 있고 자연스러우며 이해하기 쉽다.

■ 리틀 엔디안(Little Endian:역워드) : 이 방식은 낮은 자리수를 먼저 저장한다. 가장 뒤쪽 바이트인 0x78이 메모리의 가장 앞쪽 바이트에 저장되며 그 다음에 0x56이, 그리고 0x12는 가장 뒤쪽에 저장된다. 인텔 계열의 CPU와 DEC의 알파 칩이 이 방식을 사용한다. 메모리의 값을 읽을 때 거꾸로 읽어야 하므로 사람이 직접 읽기에는 다소 불편한 면이 있지만 기계가 값을 다루기는 더 효율적이고 몇 가지 연산에서 편리한 점이 있다.

[출처]
 빅엔디안과 리틀엔디안|작성자 오맨

이 글을 공유하기

댓글

Designed by JB FACTORY