2016-08-27 2 views
0

저는 엔디안에 대해 배우고 있으며 인텔 프로세서는 일반적으로 리틀 엔디안이라고 읽습니다. Im 인텔 맥에 그리고 나는 그것이 행동에서 그것을보기 위해 나 자신을 위해 그것을 시험해 볼 것이라고 생각했다. uint32_t을 정의한 다음 메모리에서 정렬 된대로 4 바이트를 인쇄하려고합니다.왜이 uint32_t가 메모리에서 이렇게 정렬 되었습니까?

uint32_t integer = 1027; 
uint8_t * bytes = (uint8_t*)&integer; 
printf("%04x\n", integer); 
printf("%x%x%x%x\n", bytes[0], bytes[1], bytes[2], bytes[3]); 

출력 :

0403 
3400 

는 나도 역순 (3040) 또는 변경에서 바이트를 볼 것으로 예상하지만 출력 것은 아닙니다. 나는 무엇을 놓치고 있습니까?

실제로 차이가 나는 경우 Im은 Xcode를 사용하여 Objective-C로 컴파일합니다.

답변

3

오늘날 일반적인 컴퓨터에서는 데이터 저장이 바이트 (8 비트) 단위로 발생하기 때문에.

리틀 엔디안이 사용되는 시스템에서 첫 번째 바이트는 03이고 두 번째 바이트는 04이며 세 번째와 네 번째 바이트는 00입니다.

두 번째 줄의 첫 번째 숫자 3은 첫 번째 바이트를 나타내며 두 ​​번째 숫자 4은 두 번째 바이트를 나타냅니다. 각 바이트에 대해 2 자리 숫자로 바이트를 표시하려면

printf("%02x%02x%02x%02x\n", bytes[0], bytes[1], bytes[2], bytes[3]); 
+0

아, 감사합니다. 덕분에 –

1

인디언스와 같이 인쇄 할 너비를 지정하십시오.

메모리에 데이터를 저장하는 데는 두 가지 방법이 있습니다. 리틀 엔디안과 빅 엔디 언.

빅 엔디안에서 가장 중요한 바이트가 먼저 저장됩니다.

리틀 엔디안에서 최하위 바이트가 먼저 저장됩니다. 데이터가 큰 엔디안 시스템에서

03 04 00 00 

로 저장 될 때

당신의 시스템은 인쇄 된 앞에 0을 얻기 위해 사용 %02x를 인쇄

00 00 04 03 

을했을 것이다, 리틀 엔디안이다.

+0

. 나는 지금 본다. –

관련 문제