검색 여닫기
검색
메뉴 여닫기
555
262
4
6.2천
noriwiki
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
파일 올리기
환경 설정 메뉴 여닫기
notifications
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
user-interface-preferences
한국어
개인 도구
로그인
Endianness 문서 원본 보기
noriwiki
문서 공유하기
다른 명령
←
Endianness
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
상위 문서: [[Memory]] ==개요== multi-byte data를 메모리에 어떠한 방식으로 저장하는 지를 byte ordering이라고 하며, 대표적으로 두가지 방식이 주로 사용된다. ** Big Endian: Sun, PowerPC ** Little Endian: x86-64, ARM* ==Byte Ordering== 만약 C code에 int x = 0x12345678을 저장하고자 한다면, 0x12(MSB)가 어디에 저장되느냐에 따라서 byte ordering 방식이 나뉜다. [[파일:Endianness.png|프레임없음|500x500픽셀]] * Big Endian: MSB(0x12)를 lowest address에 저장한다. ** 즉, x는 0x12, 0x34, 0x56, 0x78과 같이 byte단위로 쪼개어져서 저장된다. * Little Endian: MSB(0x12)를 highest address에 저장한다. ** 즉, x는 0x78, 0x56, 0x34, 0x12과 같이 byte단위로 쪼개어져서 저장된다. byte8개에는 16진수가 2자릿수까지 저장되기 때문이다. ===Checking Byte Order=== 아래는 data의 byte 표현을 알아보는 c 함수이다. <syntaxhighlight lang="c"> void show_bytes(unsigned char* start, size_t len) { size_t i; for (i = 0; i < len; i++) { printf("%p: 0x%.2x\n", start + i, start[i]); } } </syntaxhighlight> <syntaxhighlight lang="c"> int main() { int a = 303030; show_byte((unsigned char*) &a, sizeof(int)); } </syntaxhighlight> 위를 실행하면 결과는 다음과 같이 나온다. [[파일:EndianExample.png|섬네일|stroing 303030 in little endian.]] <syntaxhighlight lang="shell"> 0x7ffd0f231864: 0xb6 0x7ffd0f231865: 0x9f 0x7ffd0f231866: 0x04 0x7ffd0f231867: 0x00 </syntaxhighlight> 303030을 16진수로 나타내면 0x49fb6인데, 실행결과에서 0x04가 highest address에 저장된 것으로 보아 정상적인 little endian 방식으로 저장되었다. ==각주== [[분류:컴퓨터 시스템]]
Endianness
문서로 돌아갑니다.