일반 데스크탑용 프로그램 들을 개발하는 경우에는
Data의 저장 형태가 Little-endian 인지 Big-endian인지 구분하지 않아도 된다.
하지만, embedded system 상에서 프로그래밍을 할 적에는
Little-endian과 Big-endian의 차이를 확실히 구별해줘야 한다.
.................................................................................................................
이 용어들의 조나단 스위프트의 걸리버 여행기에서 유래된 듯 하다.
걸리버 여행기에 나오는
소인국 사람들(Lilliputian)은 삶은 달걀을 넓은 면을 깨서 먹는 사람들(Big Endian)과
좁은 면을 깨서 먹는 사람들(Little Endian)로 나뉘어 정치적인 대립을 하게 된다.
..................................................................................................................
아래 처럼 하위 8bit와 상위 8bit를 swap해줌으로써 앤디안 변화를 구현한다.
{
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의 최하위 바이트로 포함이 되어 버린다.
이를 다음과 같이 고쳐본다.
{
unsigned short pNAvail;
unsigned char pVFlag;
unsigned char pReserved;
unsigned char Uni_char_data[64];
} struct_casting;
아마도 word 단위로 align 되는 문제로 인해,
바이트가 섞였으리라 생각한다.