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("Little Endian: 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("Big Endian: 0x"); for(i=0; i<4; i++) printf("%x", UBox.arr[i]); printf("n"); return 0; }
'프로그래밍(TA, AA) > C C++' 카테고리의 다른 글
[C] 임베디드 시스템 간단히 훑기 (0) | 2017.12.17 |
---|---|
[시스템프로그래밍] 디버깅 (0) | 2017.12.12 |
[시스템프로그래밍] IPC D-Bus란? (1) | 2017.10.18 |
[C C++] 캐리지 리턴(CR)과 라인 피드(LF) (0) | 2017.09.23 |
[Pro*C] Pro*C 프로그램의 구성 (0) | 2017.09.09 |