본문 바로가기
임베디드 개발/펌웨어

빅 엔디안(Big Endian)과 리틀 엔디안(Little Endian)

by eteo 2022. 8. 31.

컴퓨터는 데이터를 메모리에 저장할 때 바이트(byte) 단위로 나눠서 저장한다. 하지만 컴퓨터가 저장하는 데이터는 대게 32비트(4바이트)나 64비트(8바이트)로 구성된다. 따라서 이렇게 연속되는 바이트를 순서대로 저장해야 하는데, 이것을 바이트 저장 순서(바이트 오더 : byte order)라고 한다.

 

바이트 오더는 빅 엔디안(big endian) 과 리틀 엔디안(little endian) 방식이 있다.

 

빅 엔디안은 메모리의 Lower Address 에 MSB (최상위비트/Most Significant Bit) 부터 저장하는 방식이고,

리틀 엔디안은 메모리의 Lower Address 에 LSB (최하위비트/Least Significant Bit) 부터 저장하는 방식이다.

 

 

 

아래 예시에서 Data의 MSB는 0x01이고 LSB는 0x04이다.

리틀 엔디안 방식으로 저장되면 LSB First 로 0x04030201 이 저장되고

빅 엔디안 방식으로 저장되면 MSB First 로 0x01020304 이 저장된다. 

리틀 엔디안 방식인데 0x40302010 이 아니라 0x04030201 인 이유는, 컴퓨터가 데이터를 처리하는 최소 단위가 바이트이기 때문에 바이트가 쪼개지진 않는다. '안녕하세요'를 거꾸로 하면 '요세하녕안'이지 'ㅛㅇㅔㅅㅏㅎㅇㅕㄴㄴㅏㅇ'가 아닌것과 마찬가지이다.

 

 

 

 

 

 

테스트 코드

#include <stdio.h>

int main()
{
    int i;

    int test = 0x12345678;
    char* ptr = (char*)&test;
    
    for (i = 0; i < sizeof(int); i++)
    {
        printf("%x", *ptr++);
    }

    return 0;
}

 

테스트 데이터인 0x12345678 을 int 형에 대입하고 2진수로 출력해 봤을때

 

결과가 12345678로 출력되었다면 빅 엔디안, 78563412로 출력되었다면 리틀 엔디안 방식이다.

 

 

 

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