Endian에 관한 문제는 embedded system에서는 항상 따라다니는 요소입니다.
 
little-endian에서는 제대로 돌아가는 프로그램이 big-endian에서는 오류를 일으키거나 하는 일은 다반사죠.
그래서 두가지 endian을 지원하기 위해 똑같은 테스트를 반복해서 하는 경우도 있죠.

보통은 매크로를 사용하여 빌드시 endian을 정하기도 하지만, runtime시 정할 수도 있습니다.

다음의 코드는 실행환경의 endian을 알아내는 코드입니다. (소스 수정 없이 두가지 endian을 테스트 할 수 있음을 의미합니다.)

#include "stdio.h"

int main(void)
{
    union
    {
        unsigned long int i;
        unsigned char uc[sizeof(long int)];
    }u = {1};

    if(u.uc[0] == 1) printf("little-endian");
    else if(u.uc[sizeof(long int)-1] == 1) printf("big-endian");
    else printf("unknown endian??");

    return 0;
} 

union은 잘사용되지 않는 자료형이지만 유용하게 사용되었네요.
신고
Write your message and submit
« PREV : 1 : ... 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : ... 228 : NEXT »