Byte Ordering 과 Bit Ordering – 바이트 정렬 순서와 비트 정렬에 대해

우리는 흔히 바이트 오더링에 대해서는 신경쓰지만 비트 오더링에 대해서는 신경을 쓰지 않는다.


왜 일까? 답은 간단한곳에 숨어있다. 바이트 오더링은 Intel 계열 (Little Endian), 모토롤라 계열(Big Endian)으로 나눠지지만 비트 오더링 관련해서는 둘다 Big Endian을 사용한다는 것이다.


최초 이게 표준적으로 사용되었다고 한다. (표준이 아니라.) 그때 당시에는 바이트 보다는 비트 정렬 방식이 더 중요하게 대두되었던 상황이였고 그래서 하나를 선택한걸로 생각이 든다.


그러나 바이트 오더링을 생각하지 않고 지나치게되어 16비트 시절 드디어 문제가 발생하기 시작했다. 바이트 오더링이 다른 곳에서 같은 데이터를 다르게 해석하는것이다


Little Endian(LSB가 주소번지수가 낮은곳에 위치) , Bit Endian(MSB가 주소번지가 낮은곳에 위치)에서 동일하게 ABCD를 데이터를 읽으려 할때 16비트를 한단위로 하여 읽을경우

Bin Endian     : AB CD
Little Endian   : BA DC


로 읽어들인다는것이다.


이는 다른 PC와 통신을 하는 네트웤 프로그래밍에서 심각하게 문제가 되었다. 그리하여 나온게 네트웍 바이트 오더링이다. 네트웍 바이트 오더링은 Big Endian을 따른다. 이에따라 인텔 계열은 네트웍을 사용함에 따라 네트웍 바이트 오더링으로 변환해서 보내야 하며 받은 자료를 자신의 호스트 바이트 오더로 변한해서 사용해야 한다.

Post to Twitter