한국어
C/C++
 

“Big endian” 과 “Little endian” 은 컴퓨터 메모리에 저장된 바이트들의 순서를 설명하는 용어이다.
이 용어는 “걸리버 여행기”라는 고전 소설에서 처음 나오게 되었는데, 달걀의 뾰족한 쪽을 먼저 깨먹을 것을 주장하는 무리의 “Little endian” 과 넓은 쪽 부분을 먼저 깨먹을 것을 주장하는 무리의 “Big endian”의 싸움. 즉, 사소한 것들로 싸우는 인간들의 모습을 풍자한 이야기에서 나오게 된다.


현대에 그 용어는 다시 Danny Cohen이라는 사람의 논문 중 Memory Order라는 섹션에서 인용하게 되었고, 이 논문에는 CPU가 메모리에 데이터를 저장할 때 어느 순서로 저장하는가에 대해 설명하는데, 왼쪽에서 오른쪽으로 저장하는 것을 “Big endian”, 반대로 오른쪽에서 왼쪽을 저장하는 것을 “Little endian”이라고 명명한 것이 지금 까지 이어온 것이다.
 

Little-endian 은 메모리 첫 주소에 하위 데이터(데이터열의 맨 오른쪽)부터 1바이트 단위로 저장한다.

이와 반대로 Big-endian 은 상위 데이터(데이터열의 맨 왼쪽)부터 저장한다.

만약, Big-endian 을 사용하는 시스템에서 데이터를 그대로 보내고, Little-endian을 사용하는 시스템에서

byte order의 변환 없이 그대로 사용하게 된다면 그 결과가 완전 달라져버리게 되므로, 사용되는 시스템에 따라 서로 맞춰줘야 할 것이다.

 

예제

union ubox
{
    int a;
    unsigned char arr[4];
}UBox;

int main()
{
    int i;
    unsigned char temp;
    UBox.a = 0x12345678;
    
    printf("리틀엔디안 : 0x"); //리틀엔디안 형식 출력
    for(i=0; i<4; i++)
        printf("%x", UBox.arr[i]);
    printf("n");
    
    for(i=0; i<2; i++) //메모리 내용 swap
    {
        temp=UBox.arr[i];
        UBox.arr[i]=UBox.arr[3-i];
        UBox.arr[3-i]=temp;
    }
    
    printf("빅엔디안 : 0x");
    for(i=0; i<4; i++)
        printf("%x", UBox.arr[i]);
    printf("n");
    
    return 0;
}
번호 제목 글쓴이 날짜 조회 수
공지 C Programming FAQs(한글번역 pdf문서) makersweb 2014.03.18 27750
22 비트 필드의 크기는 해당 유형의 크기를 초과할 수 없다. makersweb 2023.04.25 1379
21 flexible array member 에 대해서 file makersweb 2020.02.20 2908
20 C++로 플러그인 개발 file makersweb 2019.12.08 2741
19 배열과 포인터, 등가포인터 예제 makersweb 2019.01.16 2005
18 싱글톤 객체생성 패턴에 대해서 file makersweb 2018.07.01 4545
17 함수포인터와 typedef로의 선언 makersweb 2018.02.03 1993
» 예제소스를 통해 리틀엔디안(Little endian)과 빅엔디안(Big endian)의 차이점 알아보기 pjk 2014.05.24 8670
15 switch와 if 중 어느 것이 더 빠른가 file makersweb 2017.01.31 3805
14 구조체 배열을 반환하는 함수를 반환하는 함수를 호출하여 구조체 멤버 배열 요소 접근하기 makersweb 2016.05.22 10871
13 c/c++문자열, 유니코드 관련 함수 makersweb 2015.07.09 6230
12 volatile이 정확히 어떤 의미를 가지는 건가요? pjk 2014.09.30 5506
11 HEX(16진수) to ASCII(아스키) 변환 코드 pjk 2014.08.24 35064
10 strcmp, wcscmp, _tcscmp pjk 2014.07.18 11452
9 클래스 멤버에 대한 액세스 제어 pjk 2014.06.27 5540
8 unsigned형의 모든 상수에는 접미사 ‘U’를 사용하여야 한다. file pjk 2014.05.24 38830
7 void형 포인터 pjk 2014.05.24 6101
6 함수 포인터의 배열 pjk 2014.05.24 8664
5 구조체 메모리 저장방식 #pragma pack file pjk 2014.05.24 5957
4 Bit fields(비트필드) pjk 2014.05.24 4850
3 영어를 C언어로, 또는 C언어를 영어로 변환 해주는 cdecl makersweb 2014.03.19 8739