본문 바로가기

IT/C++ Programming

C언어로 리틀엔디안, 빅엔디안 확인 하기

컴퓨터는 숫자를 저장할때 두 가지 방식을 사용한다.

하나는 Little Endian 방식으로 바이트를 거꾸로 넣어서 저장하고

또 하나는 Big Endian 방식으로 바이트 순서데로 저장한다. 무선말이고 하니

0x01234567 이라는 숫자를 저장한다면 컴퓨터는 이를 특정 주소에 저장하게 되는데 그림으로 표현하면 아래와 같다.


리틀 엔디안(Little Endian) 기준으로 설명하자면

0x01234567 이라는 숫자에 맨 앞에 젤 큰 자리수 "01"이 높은주소에

젤 낮은 자리수 "67"이 낮은 주소에 저장되어있다.

그래서 High Hight Low Low로 외우면 편하다.

빅엔디안(BigEndian)은 그 반대다.

리틀 엔디안(Little Endian)방식을 사용하는 모델은 Intell 기종으로 x86 시리즈로 말할수있고

빅엔디안(Big Endain) 방식은 ARM 계열이 사용하며 추가로 네트워크  바이트 오더에서도 사용된다.

c언어로 코딩해서 확인해보자.

  1. #include <stdio.h>
  2.  
  3. int is_little_endian()
  4. {
  5.  int a = 0x01234567;
  6.  
  7.  printf("%x %x\n",((char*)&a),*((char*)&a));
  8.  printf("%x %x\n",((char*)&a+1),*((char*)&a+1));
  9.  printf("%x %x\n",((char*)&a+2),*((char*)&a+2));
  10.  printf("%x %x\n",((char*)&a+3),*((char*)&a+3));
  11.  
  12.  if ( *((char*)&a) == 0x67 )
  13.  {
  14.   return 1; // little endian
  15.  }
  16.  
  17.  return 0; //big endian
  18.  
  19. }
  20.  
  21. void main()
  22. {
  23.  
  24.  int res= is_little_endian();
  25.  if ( res == 1 )
  26.  {
  27.   printf("little endian system\n");
  28.  }
  29.  else
  30.   printf("big endian system\n");
  31.  
  32. }