본문 바로가기

Software/C/C++

[C++] Big Endian과 Little Endian방식의 차이.

■ Big Endian과 Little Endian방식의 차이.


우리가 사용하는 정수, 실수 등의 변수들은 2바이트 이상 메모리를 차지하고 저장되어 있다.

따라서, 메모리 저장 단위인 1바이트(8bit)보다 큰 값들을 저장해야 한다.


예컨대, 정수는 4바이트가 연속적으로 메모리에 저장된다. 메모리는 바이트 단위이므로 4바이트 정수값을 1바이트씩 연속적으로 저장해야 한다. 1바이트씩 나누어 연속적으로 저장하는 방법은 현재 두 가지가 존재한다.


하위 바이트(즉 little end)가 메모리에 먼저 저장 되는 Little-endian방식과, 상위 바이트(즉, big end)가 메모리에 먼저 저장되는 Big-endian방식이 있다.

정수값 0x12345678을 예로 들어 도식화 해 보면 쉽게 이해 간다.


○ Big Endian 방식과 Little Endian의 데이터 저장 비교.

* LSB(Least Significant Bit) : 최 하위 Bit, MSB(Most Significant BIt) : 최 상위 Bit.


○ 정수값을 문자열로 변환하여 출력 비교.

/*
** filename : bigEndian_littleEndian.c
** subject : Compare big endian and little endian.
*/
#include <stdio.h>

int main()
{
    int i=0x12345678,j;
    char *p=(char *)&i;


    // 빅 엔디안
    printf("Big Endian : ");
    for (j = 0; j < sizeof(int); j++)
        printf("%x ",p[j]);
    printf("\n");


    // 리틀 엔디안
    printf("Little Endian : ");
    for (j=sizeof(int)-1;j>=0;j--)
        printf("%x ",p[j]);
    printf("\n");


    return 0;
}

/*
excute result :

Big Endian : 78 56 34 12            // 80x86계열이어서 반대로 출력됨.
Little Endian : 12 34 56 78        

*/


※ 더 자세한 사항은 아래의 참고문헌을 찾아 보세요.


< 참고문헌 >

1. http://www.winapi.co.kr/clec/cpp2/18-1-3.htm, http://www.winapi.co.kr

2. 컴퓨터 네트워크 프로그래밍, 김화종, 2004, 홍릉과학 출판사, 48p.

   인터넷 주소변환 부분.