✅ 목표 (Goal)

엔디안이 다른 시스템끼리 데이터를 주고받을 때, 호스트 바이트 순서와 네트워크 바이트 순서(빅 엔디안)를 바꿔 주는 함수를 알아보자.

✅ 엔디안 변환 함수

네트워크는 빅 엔디안으로 약속했으므로, 보내기 전에 호스트 순서를 네트워크 순서로 바꾸고, 받은 뒤에 다시 호스트 순서로 바꾼다.

함수 이름의 뜻 하는 일
htons host to network short 16비트를 호스트 순서에서 네트워크 순서로
htonl host to network long 32비트를 호스트 순서에서 네트워크 순서로
ntohs network to host short 16비트를 네트워크 순서에서 호스트 순서로
ntohl network to host long 32비트를 네트워크 순서에서 호스트 순서로

✅ 예제 (리눅스, gcc)

#include <stdio.h>
#include <stdint.h>
#include <arpa/inet.h>

int main(void) {
    uint16_t s = 0x1234;
    uint32_t l = 0x12345678;

    printf("htons: 0x%04x -> 0x%04x\n", s, htons(s));
    printf("htonl: 0x%08x -> 0x%08x\n", l, htonl(l));
    printf("ntohs(htons): 0x%04x\n", ntohs(htons(s)));
    printf("wrong htonl(s): 0x%08x\n", htonl(s));
    return 0;
}

리틀 엔디안 PC에서의 출력

htons: 0x1234 -> 0x3412
htonl: 0x12345678 -> 0x78563412
ntohs(htons): 0x1234
wrong htonl(s): 0x34120000

✅ 참조 (Ref.)

▼ 엔디안 방식에 구애 받지 않는 C 코드 작성하기