UXDE dot Net Wordpress Themes

ntohl 예제

호스트-네트워크 API의 또 다른 문제는 64비트 데이터 요소를 조작할 수 없다는 것입니다. 그러나, 당신은 당신의 자신의 ntohll() 및 htonll() 해당 함수를 쓸 수 있습니다: uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl (uint32_t 네트롱); uint16_t ntohs(uint16_t 네트쇼트); 파일의 데이터 요소가 부동 지점 형식(double)인 경우 _isnan() 함수는 Endian 형식을 결정하는 데 도움이 될 수 있습니다. 예를 들어 32비트 번호인 0xDEADBEEF를 예로 들어 보겠습니다. 빅 엔디안 규칙에 따라 컴퓨터는 다음과 같이 저장합니다: ntohl 기능도 있습니다. ntohl 매크로가 항상 사용되도록 적절한 헤더 파일을 포함해야 합니다. TCP/IP 스택을 실행하는 프로세서자체가 Big-Endian인 경우 네 개의 매크로(즉, ntohs, ntohl, htons, htonl)는 아무 작업도 수행하지 않고 런타임 성능에 영향을 미치지 않습니다. 그러나 프로세서가 리틀 엔디안인 경우 매크로는 바이트의 순서를 적절하게 다시 정렬합니다. 이러한 매크로는 네트워크 패킷을 빌드하고 구문 분석할 때와 소켓 연결이 생성될 때 정기적으로 호출됩니다. 리틀 엔디안 프로세서에서 TCP/IP를 사용할 때 심각한 런타임 성능 저하가 발생합니다. 따라서 네트워크 기능이 풍부한 라우터 나 게이트웨이와 같은 장치에서 사용할 Little-Endian 프로세서를 선택하는 것이 현명하지 않을 수 있습니다.

(참조에서 발췌 [1]). 또한 표준 바이트 순서 API를 사용하여 런타임에 시스템의 바이트 순서를 결정할 수도 있습니다. 예를 들어 ntohl은 BSD 소켓을 구현하는 대부분의 UNIX 시스템을 포함한 다른 환경에 이식가능합니다. 마찬가지로 들어오는 32비트 값을 변환하려면 ntohl() 사용: ntohl 매크로는 네트워크 바이트 순서에서 호스트 바이트 순서로 서명되지 않은 긴 정수 netlong을 변환합니다. IBM370에서는 네트워크 바이트 주문과 마찬가지로 IBM 370 바이트 주문이 큰 엔디안이기 때문에 null 매크로입니다. 다른 형식이 필요한 경우 다중 바이트 수를 되돌리는 것은 매우 쉽습니다. 다음 예제에서는 간단한 C 유니온을 사용하여 Endian 변환 함수를 구현할 수 있는 방법을 보여 주며, 예를 들어 다음 코드 조각은 한 형식(예: Big-Endian)에서 다른 형식(예: 리틀 엔디안): ntohl으로 double의 데이터 배열을 변환하는 방법을 보여 주며 있습니다. 매크로는 헤더 파일에 정의되어 있습니다.

아래와 같이 비트별 연산을 사용하여 보다 효율적인 함수를 구현할 수 있습니다. 이 문제를 해결 하는 방법은 모든 사람들이 그들의 차이 제쳐두고 모토로라와 IBM이 바로 그것을 했다 동의, 그리고 인텔은 그것을 이상한 방법, 그래서 우리 모두 변환 우리의 바이트 순서 “큰 엔디안” 그들을 보내기 전에. 인텔은 “리틀 엔디안” 컴퓨터이기 때문에 선호하는 바이트 주문을 “네트워크 바이트 순서”라고 부르는 것이 훨씬 정치적으로 정확합니다. 따라서 이러한 함수는 네이티브 바이트 순서에서 네트워크 바이트 순서로 변환하고 다시 돌아갑니다.