'endian'에 해당되는 글 1건

  1. 2009.01.02 코드에서 엔디안을 감지하는 방법


코드에서 엔디안을 감지하는 방법은 아주 간단하다.
원리는 2바이트 이상을 사용하는 정수형에 값을 부여한다.
예를 들어 2바이트형 정수에 1이라는 값을 할당했다하면 한바이트는 0x00일 것이고, 나머지 바이트는 0x01일 것이다.
앞의 바이트가 0x01인지, 0x00인지만 살펴보면 된다.


그래서 일반적인 코드를 작성하게 되면 다음과 같다.


int x = 0x01;
if (*(char*)&x == 0x1) {
// little endian
}else{
// big endian
}



그런데 C에서는 더 간단한(?) 방법이 있다. 원리는 동일!
union을 이용하는 방법이다.


union {
int value;
char endian;
}checkEndian;

checkEndian.value=1;
if (checkEndian.endian) {
// little endian
}else {
//big endian
}



복잡해 보이네 :)

여하튼 union개념까지 아는지 여부를 체크해보라면 저런식으로 작성할 수 있겠지.
의외로 구조체(struct)와 공용체(union)의 차이를 잘 모르는 개발자들도 많다.

더 간단(?)한 방법은 #ifdef로 플랫폼별로 endian을 지정해 줘버리는 방법도 있다.
꼭 코드에서 감지할 필요는 없다. :)

Posted by NeoZest