달력

112024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

Endian Check

karma( 업 )/C_C++ 2016. 9. 12. 14:03

간단한 코드를 이용하여 시스템의 endian을 체크할 수 있다.


int num = 0x00000001


if( *((char*)&num)) // ((char*)&num)[0]

printf("Little Endian");

else 

printf("Big Endian"); 


&num :  num의 주소값을 가져온다.

(char*)&num : 가져온 num 의 주소값을 char형 주소값으로 형변환한다.

*((char*)&num) :  가져온 num의 주소값을 char형 주소값으로 형변환한 후 char 사이즈(1byte) 만큼 값을 가져온다.

[((char*)&num)[0] : 가져온 num의 주소값을 char형 주소값으로 형변환한 후 char  배열에서 인덱스 [0]의 값을 가져온다.]


num은 4byte의 int 변수로 num에 0x00000001 값은 Little Endian일 때는 

 01

00 

00 

00 

  

Big Endian 일 때는 

00 

 00

 00

 01

 로 저장된다.

*((char*)&num) 문장은 4byte인 num을 포인터 연산을 사용하여 1byte변수인 char형으로 형변환 시킨 후 char 사이즈만큼의 값을 가져와 비교하여 Little/Big Endian 여부를 판단한다.



'karma( 업 ) > C_C++' 카테고리의 다른 글

09. std::tuple( C++11로 가자 )  (0) 2018.11.01
02. 범위기반 for문( C++11으로 가자 )  (0) 2018.11.01
01. auto( C++11으로 가자 )  (0) 2018.11.01
01. C++11의 특징( C++11으로 가자 )  (0) 2018.11.01
C++11으로...  (0) 2018.11.01
Posted by 생짜
|