A가 BE 시스템이고 LE 시스템 B로 데이터를 보내기 위해 0x44332211을 보내고 있다고 가정합니다. 기본적으로 A는 0x44332211의 htonl을 사용하며 이는 0x44332211에 불과합니다.
이제 0x44332211이 B에 도달하면 B는 그것이 BE 형식이라는 것을 알고 있으므로 B는 htonl 함수를 사용하여 이를 뒤집어 0x11223344로 변경합니다.
이 뒤집기는 무엇을 의미합니까? 나는 인터넷에서 이 개념에 대해 읽었습니다. 왜 보관하기 전에 뒤집어야 합니까?
왜냐하면 이 경우 뒤집힌 값 0x11223344가 0x44332211처럼 LE에 저장되기 때문인데, 비슷해 보여도 B가 다르게 해석했기 때문에 A가 보낸 것과는 다른 것일까요?
/* BE에서 LE로의 변환*/
답변1
빅엔디안 C 라이브러리의 및 함수는 htonl()
실제로 아무 작업도 수행하지 않습니다("no-ops"). ntohl()
이렇게 하면 동일한 코드가 BE 및 LE 시스템에서 작동합니다. C lib로 컴파일할 때 이러한 함수는 바이트를 뒤집지만 BE 시스템에서는 네트워크 바이트 순서가 빅 엔디안이므로 변경되지 않은 상태로 유지됩니다. 호스트는 이미 빅엔디안입니다.
즉, 귀하의 예에서 BE 머신 A는 아무것도 변경하지 않습니다. LE 머신 B만 가능합니다.
답변2
실제로 특정 방식으로 보관하기 전에 뒤집을 필요는 없습니다. 이는 호스트가 리틀 엔디안 순서를 사용하기 때문에 필요합니다. 따라서 네트워크에서 1바이트보다 긴 숫자를 수신하면 바이트를 뒤집어 숫자를 올바르게 해석합니다. 데이터를 어떤 목적으로든 사용하려면 먼저 이러한 뒤집기가 필요합니다.
비유로, 원래 일본어 방식으로 인쇄된 만화를 읽는다고 상상해 보십시오(즉, 일반적으로 마지막 페이지가 실제로는 첫 페이지입니다). 이 사실을 모르고 책을 "뒤집지" 않으면 이야기를 이해할 수 없습니다.