1. 바이트 저장 순서

2. 빅 엔디안(Big Endian)

3. 리틀 엔디안(Little Endian)

4. 빅 엔디안 vs 리틀 엔디안

1. 바이트 저장 순서

컴퓨터는 데이터를 메모리에 저장할 때 바이트(byte) 단위로 나눠서 저장함.

대게 컴퓨터가 저장하는 데이터는 32비트(4바이트)나 64비트(8바이트)로 구성됨.

따라서 연속되는 바이트를 순서대로 저장해야 하는데, 이것을 바이트 저장순서라고 함.

*이때 바이트가 저장되는 순서에 따라 빅 엔디안과 리틀 엔디안으로 나눌 수 있음.

Untitled

2. 빅 엔디안(Big Endian)

2-1) 빅 엔디안이란?

낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식임.

우리가 숫자를 사용하는 선형 방식과 같은 방식임.

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

2-2) 빅 엔디안 예시

ex) 32비트 크기의 정수가 있다면

Untitled

ex) 정수는 각각 다음과 같이 1바이트 값 4개로 구성됨.

Untitled

2-3) 빅 엔디안 방식으로 메모리에 저장한다면

Untitled

3. 리틀 엔디안(Little Endian)

3-1) 리틀 엔디안이란?

리틀 엔디안 방식은 낮은 주소에 데이터의 낮은 바이트(LSB, Least Significant Bit)부터

저장하는 방식임.

우리가 숫자를 사용하는 선형방식과는 반대로 거꾸로 읽어야 함.

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

3-2) 리틀 엔디안 방식으로 저장한다면?

ex) 0x12345678

Untitled

4. 빅 엔디안 vs 리틀 엔디안

4-1) 빅 엔디안 vs 리틀 엔디안 차이점

큰 데이터를 어떻게 나누어 저장하는 가에 따른 차이일 뿐 어느 방식이 더 우수하다고 단정할 수 없음.

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

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

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

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

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

4-2) C언어 코드

#include <stdio.h>

int main(void) {
	int i;
	int test = 0x12345678;
	char* ptr = (char*)&test;	// 1 바이트만을 가리키는 포인터를 생성함. 
	
	for (i = 0; i < sizeof(int); i++) {
		printf("%x", ptr[i]);	// 1 바이트씩 순서대로 그 값을 출력함. 
	}
	return 0;
}