컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법
컴퓨터는 데이터를 메모리에 저장할 때 바이트(byte) 단위로 나눠서 저장한다.
바이트를 배열하는 방법을 바이트 순서(Byte order)라고 한다.
이때 바이트가 저장되는 순서에 따라 다음과 같이 3가지 방식으로 나눌 수 있다.
낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식이다.
(평소 숫자를 사용하는 선형 방식과 같은 방식)
장점 : 메모리에 저장된 순서를 그대로 읽을 수 있고 이해하기 쉽다.
예시 : 0x12345678
을 빅 엔디안 방식으로 저장한다면 0x12 0x34 0x56 0x78
낮은 주소에 데이터의 낮은 바이트(LSB, Least Significant Bit)부터 저장하는 방식이다.
대부분 인텔 CPU 계열에서는 이 방식으로 데이터를 저장한다.
예시 : 0x12345678
를 리틀 엔디안 방식으로 저장한다면 0x78 0x56 0x34 0x12
빅 엔디안 vs 리틀 엔디안
단지 저장해야 할 큰 데이터를 어떻게 나누어 저장하는가에 따른 차이일 뿐이다.
물리적으로 데이터를 조작하거나 산술 연산을 수행할 때에는 리틀 엔디안 방식이 더 효율적이고,
데이터의 각 바이트를 배열처럼 취급할 때에는 빅 엔디안 방식이 더 적합하다.
ex) 네트워크를 통해 데이터를 전송할 때에는 빅 엔디안 방식이 사용된다.
따라서 인텔 기반(리틀 엔디안 방식)의 시스템에서 소켓 통시을 할 때에는 바이트 순서에 신경을 써서 데이터를 전달해야 한다.
#include <stdio.h>
int main() {
int i;
int test = 0x12345678;
char* ptr = (char*)&test; // 1 바이트만을 가리키는 포인터를 생성함.
for (i = 0; i < sizeof(int); i++)
{
printf("%x", ptr[i]); // 1 바이트씩 순서대로 그 값을 출력함.
}
}
결과 확인
78563412 // 리틀 엔디안 방식
12345678 // 빅 엔디안 방식