htons 예제

이 예제에서는 2바이트 값 0x0102를 짧은 정수에 저장한 다음 두 개의 연속바이트, c[0] (주소 A) 및 c[1](주소 A & 1)을 확인하여 바이트 순서를 결정합니다. 펜티엄 머신에서이 프로그램에 의해 생성 된 출력은 다음과 같습니다 – 관련된 유형은 32 비트 (4 바이트, 아마 int) 및 16 비트 (2 바이트, 매우 가능성이 짧은) 숫자입니다. 64 비트 기계는 64 비트 ints에 대한 htonll ()이있을 수 있지만, 나는 그것을 본 적이 없다. 당신은 당신의 자신의 쓰기해야합니다. 다음 코드를 파일 byteorder.c에 보관한 다음 컴파일하여 컴퓨터에서 실행합니다. Little Endian – 이 방식에서는 로우 오더 바이트가 시작 주소(A)에 저장되고 고차 바이트는 다음 주소(A & 1)에 저장됩니다. 즉, 인텔에서는 이러한 함수가 모든 바이트를 교환하고 PowerPC에서는 바이트가 이미 네트워크 바이트 순서에 있기 때문에 아무 것도 하지 않습니다. 그러나 누군가가 인텔 컴퓨터에서 빌드하고 제대로 작동하도록 할 수 있으므로 항상 코드에서 사용해야 합니다. 인터넷 소켓 연결을 설정하는 동안 sin_port 및 sin_addr 구조의 sin_addr 멤버의 데이터가 네트워크 바이트 순서로 표시되어 있는지 확인해야 합니다. uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl (uint32_t 네트롱); uint16_t ntohs(uint16_t 네트쇼트); 일부 시스템에는 대신 를 포함해야 합니다. 이러한 함수는 매크로이며 호출 프로그램에 변환 소스 코드가 삽입됩니다.

리틀 엔디안 컴퓨터에서 코드는 네트워크 바이트 순서로 주변값을 변경합니다. 빅 엔디안 컴퓨터에서는 코드가 필요하지 않으므로 삽입되지 않습니다. 함수는 null로 정의됩니다. . . 서명되지 않은 긴 ntohl (서명되지 않은 긴 그물) -이 함수는 네트워크 바이트 순서에서 바이트 순서를 호스트하는 32 비트 수량을 변환합니다. . 호스트의 내부 표현과 네트워크 바이트 순서 간에 데이터를 변환하는 루틴은 다음과 같습니다 – 어쨌든 이러한 함수가 작동하는 방식은 호스트(컴퓨터의) 바이트 순서 또는 네트워크 바이트 순서에서 변환할지 여부를 먼저 결정하는 것입니다. « host »인 경우 호출할 함수의 첫 글자중 « h »입니다.

그렇지 않으면 « 네트워크 »에 대한 « n »입니다. 함수 이름의 중간은 한 « 에서 »로 변환하기 때문에 항상 « to »이고 끝에서 두 번째 문자는 변환하는 내용을 보여 주므로 항상 « 받는 사람 »입니다. 마지막 문자는 데이터의 크기, 짧은 경우 « s », 길게는 « l »입니다. 따라서:. 안타깝게도 모든 컴퓨터가 동일한 순서로 다바이트 값을 구성하는 바이트를 저장하는 것은 아닙니다. 2바이트로 구성된 16비트 인터넷을 생각해 보십시오. 이 값을 저장하는 방법에는 두 가지가 있습니다. 아래 나열된 이러한 기능에 대한 몇 가지 자세한 내용은 – 다른 바이트 순서 규칙을 가진 기계가 서로 통신 할 수 있도록, 인터넷 프로토콜은 네트워크를 통해 전송 되는 데이터에 대한 표준 바이트 순서 규칙을 지정합니다. 이를 네트워크 바이트 순서라고 합니다. « 네트워크 바이트 순서 »란 무엇을 의미합니까? 나는 그것이 아주 잘 정의되어 있다고 생각하지 않는다.

Les commentaires sont fermés.