LE에 저장하기 전에 Big endian의 데이터를 뒤집는 이유는 무엇입니까?

LE에 저장하기 전에 Big endian의 데이터를 뒤집는 이유는 무엇입니까?

A가 BE 머신이고 LE인 B에 데이터를 보내는 0x44332211을 보내고 있다고 가정합니다. 기본적으로 A는 0x44332211에 불과한 0x44332211의 htonl을 사용합니다.

이제 0x44332211이 B에 도달하면 B는 그것이 BE 형식이라는 것을 알고 있으므로 B는 htonl 함수를 사용하여 이를 뒤집어 0x11223344로 변경합니다.

이 뒤집기는 무엇을 의미합니까? 나는 인터넷에서 이 개념을 읽었습니다. 보관하기 전에 뒤집어야 하는 이유는 무엇입니까?

이 경우 뒤집힌 값 0x11223344는 0x44332211처럼 LE에 저장되기 때문에 B는 비슷해 보이지만 다르게 해석하기 때문에 A가 보내는 것과 다릅니다.

/* BE에서 LE로 변환 */

답변1

빅 엔디안 C 라이브러리의 및 기능 htonl()ntohl()실제로 아무 작업도 수행하지 않습니다("작동하지 않음"). 이렇게 하면 BE와 LE 시스템 모두에서 동일한 코드를 사용할 수 있습니다. LE 시스템에서 C lib로 컴파일하면 해당 함수는 바이트를 뒤집지만 BE 시스템에서는 네트워크 바이트 순서가 빅 엔디안이고 호스트가 이미 빅 엔디안이므로 그대로 유지됩니다.

즉, 귀하의 예에서 BE 머신 A는 아무것도 변경하지 않습니다. LE 머신 B만이 이를 수행합니다.

답변2

실제로 특정 방식으로 보관하기 전에 뒤집을 필요는 없습니다. 호스트가 리틀 엔디안 순서를 사용하므로 네트워크에서 1바이트보다 긴 숫자를 수신하면 해당 숫자를 올바르게 해석하기 위해 바이트를 뒤집기 때문에 필요합니다. 데이터가 어떤 목적으로든 사용되기 전에 이러한 뒤집기를 수행하는 것이 필요합니다.

비유로, 원래 일본 방식으로 인쇄된 만화를 읽는다고 상상해 보십시오(즉, 일반적으로 페이지가 마지막 페이지이고 실제로는 첫 번째 페이지입니다). 이 사실을 모르고 책을 "뒤집지" 않으면 이야기를 이해할 수 없습니다.

관련 정보