리틀-엔디안 (Little-Endian)

낮은(시작) 주소에 하위 바이트부터 기록, Intel CPU 계열

예) 32비트형 (4바이트) 값: 0x01020304

하위 주소 0x04 0x03 0x02 0x01 상위 주소

 

 

빅-엔디안 (Big-Endian)

낮은(시작) 주소에 상위 바이트부터 기록, Sparc / RISC CPU 계열

예) 32비트형 (4바이트) 값: 0x01020304

하위 주소 0x01 0x02 0x03 0x04 상위 주소

 

 

빅엔디안은 우리가 평소에 보던 방식으로 메모리에 쓴다고 생각하면 되고 리틀엔디안은 뒤집혀서 쓴다고 이해하면 되겠죠? 

 

그럼 왜 빅엔디안으로 안 쓰는 걸까요? 

 

그 이유는 산술연산유닛(ALU)에서 메모리를 읽는 방식이 메모리 주소가 낮은 쪽에서부터 높은 쪽으로 읽기 때문에 

산술 연산의 수행이 더 쉽습니다. 또한, 데이터를 다른 시스템으로 전송할 때 

서로 다른 데이터 저장 방식의 시스템끼리 통신하게 되면 전혀 엉뚱한 값을 주고받기 때문이랍니다.

 

자바스크립트의 DataView 인터페이스는 특정 파일 또는 수신된 바이너리 데이터를 읽고 쓸 수 있도록 설계되었습니다. 

브라우저가 작동 중인 CPU에 상관 없이 일관되고 올바른 결과를 얻을 수 있도록 작동하기 위해 

모든 값의 모든 접근에 엔디안(Endianness)을 지정해야 합니다.

 

-----------------------------------------------------------------------------------------

long a = 0x1234;

a = htonl(a);

 

호출전: 0x0012FED4  34 12 00 00

호출후: 0x0012FED4  00 00 12 34

-----------------------------------------------------------------------------------------

 

다음과 같은 간단한 코드를 이용해서 시스템의 Endian 을 체크할수 있다.

 

void main(void)

{

    int i = 0x00000001;

 

    if( ((char *)&i)[0] )

        printf( "Littile Endian\n" );

    else

        printf( "Big Endian\n" );

 

    /* ANOTHER */

if( *((char *)&i+0) )

        printf( "Littile Endian\n" );

    else

        printf( "Big Endian\n" );

}

+ Recent posts