작성
·
187
0
char_to_binary(data[i])
-> char_to_binary(data[bytes - 1 - i])
이렇게 수정한 이유가 궁금합니다.
앞에서부터 2진수로 나타내야 하는 거 아닌가요?
답변 1
1
안녕하세요 :)
뒤에서부터 출력한 이유는 x86 CPU는 리틀엔디안을 사용하기 때문입니다.
빅엔디안을 사용하는 CPU에서는 char_to_binary(data[i])
이렇게 출력하시면 코드대로 출력이 되겠으나,
리틀 엔디안은 메모리의 낮은 번지에서 높은 번지 순으로 뒤에서부터 저장이 되기 때문에 반대로 저장이 된 겁니다.
리틀 엔디안과 빅엔디안에 대해 조금 더 설명을 드리자면,
이는 메모리에 데이터를 저장하는 순서를 나타냅니다.
가령 "ABCD" 라는 문자열이 있다고 해보죠.
빅 엔디안을 사용하는 체계에서는 낮은 주소에서부터 A, B, C, D 순으로 저장됩니다.
하지만 리틀 엔디안을 사용하는 체계에서는 낮은 주소에서부터 D, C, B, A 순으로 저장됩니다.
그래서 강의 내에서도 출력이 반대로 이루어진 것입니다.
엔디안에 대해서 조금 더 알고 싶으시다면 아래 링크를 참고해보시고,
추가 질문이 있으시다면 언제든 댓글 달아주세요.
감사합니다.
http://www.tcpschool.com/c/c_refer_endian