리틀 엔디안 CPU 가 0x12345678 를 메모리에 저장할 때 0x78563412 로 저장합니다.
리틀 엔디안 CPU 에서 메모리에 있는 0x78563412 를 리틀 엔디안용 printf() 로 printf("%x") 하면 0x12345678 로 출력됩니다.
리틀 엔디안 CPU 에서 hton(0x12345678) 을 하면 메모리에 있는 0x78563412 를 가져와서 0x12345678 로 바꿔서 다시 메모리에 저장하겠죠.
리틀 엔디안 CPU 에서 메모리에 있는 0x12345678 을 리틀 엔디안용 printf() 를 이용해서 printf("%x") 하면 0x78563412 로 출력되겠죠.
맨 첫번째 댓글에 이해되지 않는 문장이 있다면, 누군가 정답을 말해도 이해할 능력이 전혀 없는 것이니 질문으로 시간을 낭비할 때가 아닙니다.
왜냐하면 printf의 %x format
왜냐하면 printf의 %x format specifier는 호스트가 big endian이든 little endian이든 일관성 있게 "사람에게 익숙한 방식"으로 출력을 하기 때문이지요.
복잡하게 설명할 필요도 없어요. htons가 없었으면 어떻게 출력됐을 것 같습니까? htons가 추가되면서 결과가 어떻게 바뀔 거라고 예상했죠?
$ more test.c
x86, 32bit 머신에서 이렇게 나오네요.
이렇게 나오는게 맞습니다.
x86 은 리틀엔디안 방식이고 LSB-first 입니다.
아래 문서 보시면 메모리에 어떠한 순서로 저장되는지 잘 나옵니다.
http://www.yolinux.com/TUTORIALS/Endian-Byte-Order.html
아니 빅엔디안이면 3412 가 1234로 나와야 되는거 아닌가요????
아니 빅엔디안이면 3412 가 1234로 나와야 되는거 아닌가요????
리틀 엔디안 CPU 가 0x12345678 를
리틀 엔디안 CPU 가 0x12345678 를 메모리에 저장할 때 0x78563412 로 저장합니다.
리틀 엔디안 CPU 에서 메모리에 있는 0x78563412 를 리틀 엔디안용 printf() 로 printf("%x") 하면 0x12345678 로 출력됩니다.
리틀 엔디안 CPU 에서 hton(0x12345678) 을 하면 메모리에 있는 0x78563412 를 가져와서 0x12345678 로 바꿔서 다시 메모리에 저장하겠죠.
리틀 엔디안 CPU 에서 메모리에 있는 0x12345678 을 리틀 엔디안용 printf() 를 이용해서 printf("%x") 하면 0x78563412 로 출력되겠죠.
맨 첫번째 댓글에 이해되지 않는 문장이 있다면, 누군가 정답을 말해도 이해할 능력이 전혀 없는 것이니 질문으로 시간을 낭비할 때가 아닙니다.
댓글 달기