리루

Big Endian and Little Endian 본문

# Study/Network

Big Endian and Little Endian

뚱보리루 2017. 1. 11. 00:10

Endian : Byte ordering


Byte order의 차이는 CPU의 차이로 인해 발생한다.


 엔디안이라는 단어는 "걸리버 여행기"에서 처음 나왔다.  소인국 사람들 중에 달걀을 깰때 뭉툭한 곳(Big-Endian)부터 깨는 사람들이 있는 반면, 뾰족한 곳(Little-Endian)부터 깨는 사람들이 있어서 서로 자신의 방법이 맞다고 주장하는 글에서 유래되었다.



Little Endian은 그 크기만큼 무조건 거꾸로 읽는다 가 힌트입니다. -

"Little Endian은 상위bit (MSB)를 상위 주소에 저장을 하고 있습니다


문자열 "wxyz"를 저장한다면 다음과 같이 표현이 가능하다.


 주소

Big Endian(MSB)

 Little Endian(LSB)

 0x1003

z

w

 0x1002

y

x

 0x1001 

x

y

 0x1000 

w

z


이를 만약 두 바이트 포인터를 이용해서 0x1000부터 읽어 보면 littel-endian은 'yx','wx'가 읽히게 된다. Big-endian은 'wx','yz'의 값으로 읽힌다.


만약 한 바이트 포인터를 이용해서 읽어 보면 little-endian은 'z','y','x','w' 순으로 읽히게 된다. Big-endian 방식은 'w'.'x'.'y'.'z'로 읽힌다.


Little-endian의 경우는 포인터 변환이 될때마다 읽어 오는 순서가 바뀌게 된다.  다른 말로 Swap 되었다고 표현한다.  그러나 big-endian의 경우는 포인터 크기에 상관없이 항상 동일한 순서로 값들이 읽히게 된다.  이것만 놓고 보면 big-endian이 훨씬 좋아 보이게 된다.  특히 통신에 있어서는 big-endian방식이 유리한 점이 많아서 대부분 big-endian 방식으로 규격을 정의하는 경우가 많다.  이런 경우 little-endian방식의 CPU들은 big-endian 방식에 맞게 데이터 순서를 바꾸어주어야 하는 불편함이 따른다.


그러나 연산에 있어서는 Big-Endian 보다는 Little-Endian 방식이 유리하므로(산술연산유닛인 ALU에서 메모리를 읽는 방식이 메모리 주소가 낮은 쪽에서부터 높은 쪽으로 ㅇ릭기 때문에 산술연산의 수행이 더 쉽다.) 딱히 어느쪽이 더 좋은 방식이라고 할 수 는 없다.


출처: http://embed-avr.tistory.com/47 [AVR로 시작하는 임베디드]



'# Study > Network' 카테고리의 다른 글

Parity Bit와 Checksum  (0) 2017.04.05
패킷을 통한 TCP/UDP 비교  (1) 2017.03.27
흐름제어(Flow control)과 혼잡제어(Congestion control)  (0) 2017.02.06