IT보안관의 공부 클라우드

리틀엔디안 빅엔디안 본문

개발/C

리틀엔디안 빅엔디안

ㅡㅡㅡㅡㄷ 2020. 12. 17. 17:31

빅 엔디안(big endian)

빅 엔디안 방식은 낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식입니다.

이 방식은 평소 우리가 숫자를 사용하는 선형 방식과 같은 방식입니다.

따라서 메모리에 저장된 순서 그대로 읽을 수 있으며, 이해하기가 쉽다는 장점을 가지고 있습니다.

SPARC을 포함한 대부분의 RISC CPU 계열에서는 이 방식으로 데이터를 저장합니다.

 

예를 들어 다음과 같이 저장할 32비트 크기의 정수가 있다고 가정합니다.

예제

0x12345678

 

이 정수는 각각 다음과 같이 1바이트값 4개로 구성됩니다.

예제

0x12, 0x34, 0x56, 0x78

 

이 4개의 1바이트 값을 빅 엔디안 방식으로 저장하면 다음 그림과 같이 저장됩니다.

 


리틀 엔디안(little endian)

리틀 엔디안 방식은 낮은 주소에 데이터의 낮은 바이트(LSB, Least Significant Bit)부터 저장하는 방식입니다.

이 방식은 평소 우리가 숫자를 사용하는 선형 방식과는 반대로 거꾸로 읽어야 합니다.

대부분의 인텔 CPU 계열에서는 이 방식으로 데이터를 저장합니다.

 

앞서 예를 든 정수 "0x12345678"를 리틀 엔디안 방식으로 저장하면 다음 그림과 같이 저장됩니다.

 

 

빅 엔디안 vs 리틀 엔디안

빅 엔디안과 리틀 엔디안은 단지 저장해야 할 큰 데이터를 어떻게 나누어 저장하는가에 따른 차이일 뿐, 어느 방식이 더 우수하다고는 단정할 수 없습니다.

 

물리적으로 데이터를 조작하거나 산술 연산을 수행할 때에는 리틀 엔디안 방식이 더 효율적입니다.

하지만 데이터의 각 바이트를 배열처럼 취급할 때에는 빅 엔디안 방식이 더 적합합니다.

 

현재 여러분이 사용하는 대부분의 시스템은 인텔 기반의 윈도우이므로 리틀 엔디안 방식을 사용하고 있을 것입니다.

하지만 네트워크를 통해 데이터를 전송할 때에는 빅 엔디안 방식이 사용됩니다.

따라서 인텔 기반의 시스템에서 소켓 통신을 할 때는 바이트 순서에 신경을 써서 데이터를 전달해야 합니다.


바이트 저장 순서의 확인

다음 예제를 실행하면 여러분의 시스템에서 사용하고 있는 바이트 저장 순서를 확인할 수 있습니다.

예제

int i;

int test = 0x12345678;

char* ptr = (char*)&test; // 1 바이트만을 가리키는 포인터를 생성함.



for (i = 0; i < sizeof(int); i++)

{

    printf("%x", ptr[i]); // 1 바이트씩 순서대로 그 값을 출력함.

}

 

실행 결과

78563412

 

위의 예제 결과가 '78563412'로 출력되었다면 리틀 엔디안 방식의 시스템일 것입니다.

만약 예제의 결과가 '12345678'로 출력되었다면 빅 엔디안 방식의 시스템일 것입니다.

 

출처:www.tcpschool.com/c/c_refer_endian

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

Comments