■ 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.
인터넷 주소변환 부분.