간단한 코드를 이용하여 시스템의 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 |