한국어
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 27011
22 비트 필드의 크기는 해당 유형의 크기를 초과할 수 없다. makersweb 2023.04.25 430
21 flexible array member 에 대해서 file makersweb 2020.02.20 2006
20 C++로 플러그인 개발 file makersweb 2019.12.08 1878
19 배열과 포인터, 등가포인터 예제 makersweb 2019.01.16 1177
18 싱글톤 객체생성 패턴에 대해서 file makersweb 2018.07.01 3733
17 함수포인터와 typedef로의 선언 makersweb 2018.02.03 1219
16 switch와 if 중 어느 것이 더 빠른가 file makersweb 2017.01.31 2898
15 구조체 배열을 반환하는 함수를 반환하는 함수를 호출하여 구조체 멤버 배열 요소 접근하기 makersweb 2016.05.22 9865
14 c/c++문자열, 유니코드 관련 함수 makersweb 2015.07.09 5305
13 volatile이 정확히 어떤 의미를 가지는 건가요? pjk 2014.09.30 4681
12 HEX(16진수) to ASCII(아스키) 변환 코드 pjk 2014.08.24 33345
11 strcmp, wcscmp, _tcscmp pjk 2014.07.18 10636
10 클래스 멤버에 대한 액세스 제어 pjk 2014.06.27 4775
9 unsigned형의 모든 상수에는 접미사 ‘U’를 사용하여야 한다. file pjk 2014.05.24 37560
8 void형 포인터 pjk 2014.05.24 5196
7 함수 포인터의 배열 pjk 2014.05.24 7675
6 구조체 메모리 저장방식 #pragma pack file pjk 2014.05.24 5444
5 Bit fields(비트필드) pjk 2014.05.24 4490
» 예제소스를 통해 리틀엔디안(Little endian)과 빅엔디안(Big endian)의 차이점 알아보기 pjk 2014.05.24 8244
3 영어를 C언어로, 또는 C언어를 영어로 변환 해주는 cdecl makersweb 2014.03.19 7511