리틀-엔디안 (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" );
}
'c 언어 > 중급과정' 카테고리의 다른 글
WINDOWS, CMD, HEXA프로그램(메인소스) (0) | 2019.10.31 |
---|---|
WINDOWS, CMD, HEXA프로그램(헤더) (0) | 2019.10.31 |
LINUX,기본적인 JSON 데이타포맷 파싱 (0) | 2019.10.30 |
pointer memory use instead of structure stack memory (0) | 2019.10.30 |
[카카오 코딩테스트] 비밀지도 (0) | 2019.10.30 |