본문 바로가기

PROGRAMMING/전산학 기초

바이트순서(byte order) 그리고 빅엔디안(Big-endian)과 리틀엔디안(Little-endian)

오늘은 바이트 순서를 파헤쳐보는 시간이 되겠다.

처음 듣도보도 못했던 개념이었기에 파면 팔수록 뭔가 많이 나오리라! 했는데..

기본적인 개념인가봉가 :-0

 

1. 바이트 순서(Byte order)

: 바이트 순서 또는 바이트 오더라고도 불린다.

이 바이트 오더는 바이트를 배열하는 방법을 말하는 것이며, 자세히 말하자면 1바이트를 넘어가는 일련의 바이트를 어떻게 조합해서 실제 정수 등으로 나타낼지를 나타내는 것이다.

 

"그럼 1바이트는!! 1바이트가 서운해쟈나" 라고 한다면 과감히 말할 수 있다. 괜찮다~!!!

1바이트 자체가 하나의 완전한 값이다. 따라서 1바이트만 읽으면 값이 바뀔 우려 없이 쉽게 값을 구할 수 있기 때문이다.

 

이 바이트 오더는 주로 네트워크 프로그래밍에서 중요한 기초 개념이라고 할 수 있다.

시스템마다 내부적으로 1바이트 이상의 데이터를 처리하는 방식, 바이트 오더가 다르기 때문에 서로 다른 값으로 인식할 수 있기 때문이다. 같은 시스템 내부에서는 처리 방식이 당연히 같으니 신경 쓰지 않아도 된다 :-)

 

보통 인텔(AMD) 계열의 80x86 시스템과 Network protocol은 리틀엔디안을 사용한다.

반면에 Power PC 시스템이나 ARM의 경우에는 빅엔디안을 사용한다.

( * 참고로 JAVA 역시 빅엔디안을 사용한다. )

 

* 80x86 시스템

: x86 또는 80x86은 인텔이 개발한 마이크로프로세서(CPU) 계열을 부르는 말이자, 이들과 호환되는 프로세서들에서 사용한 명령어 집합 구조(CPU가 인식해서 기능을 이해하고 실행할 수 있는 기계어 명령어)들을 통칭하는 말이다. x86 또는 80x86이라는 이름은 여기에 속하는 초기의 프로세서들 이름이 모두 80으로 시작해 86으로 끝났기 때문에 붙여졌다. 여기에는 8086, 80186, 80286, 386, 486이 포함되며, 숫자로 상표를 등록할 수 없었기 때문에 그 뒤로는 펜티엄과 같은 별도의 이름을 사용하게 되었다.

 

* Power PC(Performance Optimization With Enhanced RISC-Performance Computing) 시스템

: 파워PC는 1991년 애플, IBM, 모토로라 등이 제휴한 AIM 연합에서 발표한 RISC 방식의 명령 집합 아키텍쳐를 말한다.

 

* ARM

: 임베디드 기기에 많이 사용되는 32-bit RISC 프로세서

 

* RISC(Reduced Instruction Set Computer)

: CPU 명령의 갯수를 줄여 하드웨어 구조를 좀 더 간단하게 만드는 방식으로 마이크로프로세서를 설계하는 방법 가운데 하나

 

2. 빅엔디안(Big-endian)

: 빅엔디안은 상위바이트부터 순차적으로 저장하는 방식을 말한다.

Big-Endian.svg

                   (참조 : en.wikipedia.org/wiki)

 

위의 그림만 봐서는 감이 잘 안 올수도 있기에 설명을 덧붙인다.

4바이트의 정수를 나타낸 바이트가 0A0B0C0D라고 해보자.

각각 바이트로 표현하면 0A 0B 0C 0D 이고 총 4바이트가 된다.

또, 저장되는 주소의 초기 번지가 1번지라고 해보자. 그렇다면 이렇게 저장된다.

 

0A 

0B 

0C 

0D 

1번지 

2번지 

3번지 

4번지 

 

 

3. 리틀엔디안(Little-endian)

: 리틀엔디안은 빅엔디안과 다르게 하위바이트부터 순차적으로 저장하는 방식을 말한다.

Little-Endian.svg

                      (참조 : en.wikipedia.org/wiki)

 

리틀엔디안은 어떻게 저장되겠는가? 빅엔디안과 반대로 생각하면 된다.

위의 상황과 똑같이 0A0B0C0D 라는 4바이트의 정수가 있고, 저장되는 주소의 초기 번지가 1번지라고 가정하자. 그렇다면 이렇게 저장된다.

 

0D 

0C 

0B 

0A 

1번지 

2번지 

3번지 

4번지 

위의 빅엔디언과 리틀엔디언을 보다시피 바이트순서가 정 반대이다보니 통신을 할 때 자칫 바이트 순서를 신경쓰지 않게 되면 듣도보도못한 생각치도 못한 값이 나올 수 있다는 것을 명심해야 한다!