본문 바로가기
IT

리틀 엔디안(Little Endian)과 빅 엔디안(Big Endian) C 코드로 알아보기

by geddy 2024. 1. 21.

이 글에서는 리틀 엔디안(Little Endian)과 빅 엔디안(Big Endian)에 대해서 설명합니다.

리틀 엔디안(Little Endian)과 빅 엔디안(Big Endian) C 코드로 알아보기 썸네일

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


리틀 엔디안(Little Endian)과 빅 엔디안(Big Endian)은 컴퓨터 메모리에 다중 바이트 데이터를 저장하는 방식을 말합니다. 이는 바이트 순서(Byte Order)를 나타내며, 주로 64비트 변수와 32비트 변수의 바이트 순서를 설명하는 데 사용됩니다.

  • 리틀 엔디안 (Little Endian): 리틀 엔디안에서는 가장 작은 주소에 가장 낮은 유효 비트를 놓습니다. 즉, 변수의 가장 작은 바이트가 가장 낮은 주소에 저장되고, 가장 큰 바이트가 가장 높은 주소에 저장됩니다.
  • 빅 엔디안 (Big Endian): 빅 엔디안에서는 가장 큰 주소에 가장 낮은 유효 비트를 놓습니다. 즉, 변수의 가장 큰 바이트가 가장 낮은 주소에 저장되고, 가장 작은 바이트가 가장 높은 주소에 저장됩니다.

64비트 변수의 예제를 통해 설명하겠습니다. 64비트 변수는 8바이트를 사용하므로 리틀 엔디안과 빅 엔디안에서의 저장 순서가 다릅니다.

예제 코드:

#include <stdio.h>

int main() {
    // 64비트 변수
    uint64_t num64 = 0x1122334455667788;

    // 32비트 변수
    uint32_t num32 = 0xAABBCCDD;

    // 64비트 변수 출력
    unsigned char *ptr64 = (unsigned char *)&num64;
    printf("64비트 변수: 0x");
    for (int i = 0; i < sizeof(num64); i++) {
        printf("%02X", ptr64[i]);
    }
    printf("\n");

    // 32비트 변수 출력
    unsigned char *ptr32 = (unsigned char *)&num32;
    printf("32비트 변수: 0x");
    for (int i = 0; i < sizeof(num32); i++) {
        printf("%02X", ptr32[i]);
    }
    printf("\n");

    return 0;
}
 

이 코드에서는 64비트 변수 num64와 32비트 변수 num32를 각각 리틀 엔디안 방식과 빅 엔디안 방식으로 출력합니다.

결과:

리틀 엔디안에서는 가장 작은 바이트가 가장 낮은 주소에 저장되므로 64비트 변수 num64의 출력은 다음과 같습니다.

 
64비트 변수: 88 77 66 55 44 33 22 11

빅 엔디안에서는 가장 큰 바이트가 가장 낮은 주소에 저장되므로 64비트 변수 num64의 출력은 다음과 같습니다.

 
64비트 변수: 11 22 33 44 55 66 77 88

32비트 변수 num32도 동일하게 리틀 엔디안과 빅 엔디안 방식으로 출력됩니다.

less
32비트 변수: DD CC BB AA

리틀 엔디안과 빅 엔디안은 데이터 저장 방식에 따라 서로 다른 결과를 나타내므로, 이를 고려하여 플랫폼 간 데이터 교환 시 주의해야 합니다.

facebook twitter kakaoTalk kakaostory naver band shareLink