일반 데스크탑용 프로그램 들을 개발하는 경우에는
Data의 저장 형태가 Little-endian 인지 Big-endian인지 구분하지 않아도 된다.

하지만, embedded system 상에서 프로그래밍을 할 적에는
Little-endian과 Big-endian의 차이를 확실히 구별해줘야 한다.

.................................................................................................................
이 용어들의 조나단 스위프트의 걸리버 여행기에서 유래된 듯 하다.
걸리버 여행기에 나오는
소인국 사람들(Lilliputian)은 삶은 달걀을 넓은 면을 깨서 먹는 사람들(Big Endian)과
좁은 면을 깨서 먹는 사람들(Little Endian)로 나뉘어 정치적인 대립을 하게 된다.
..................................................................................................................

아래 처럼 하위 8bit와 상위 8bit를 swap해줌으로써 앤디안 변화를 구현한다.

for(i=0; i<len; i++)
                {
                    unsigned short high;
                    unsigned short low;

                    high = (*(uni_char+i)&0xFF00)>>8;
                    low = (*(uni_char+i)&0x00FF)<<8;
                    *(uni_char+i) = high|low;
                }



typedef struct
{
    unsigned short pNAvail;
    unsigned char pVFlag;
    unsigned char Uni_char_data[64];
} struct_casting;
struct_casting g_test_casting;

struct_casting *test_casting = &g_test_casting;


PRINT_UNI_STRING((unsigned short*)test_casting->Uni_char_data);
의 경우 캐스팅에서 문제가 생긴다.
Uni_char_data 앞의 pVFlag가 첫 array의 최하위 바이트로 포함이 되어 버린다.

이를 다음과 같이 고쳐본다.

typedef struct
{
    unsigned short pNAvail;
    unsigned char pVFlag;
    unsigned char pReserved;
    unsigned char Uni_char_data[64];
} struct_casting;

아마도 word 단위로 align 되는 문제로 인해,
바이트가 섞였으리라 생각한다.


+ Recent posts