32비트 IP 주소는 IP address struct에 저장된다.
/* Internet address structure */
struct in_addr {
uint32_t s_addr; /* network byte order (big-endian) */
};
IP 주소들은 네트워크 바이트 순서에 따라 메모리에 저장된다.
패킷 헤더에서, 머신 간 전송되는 모든 정수에도 적용된다. … (뭔말인지 모르겠음)
유닉스는 네트워크와 호스트 바이트 순서 간 변환을 위해 다음과 같은 함수들을 제공한다.
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort); // network byte order로 리턴한다. : 빅 엔디안
uint32_t ntohl(uint32_t netlong);
uint32_t ntohs(uint16_t netshort); // host byte order로 리턴한다. : 리틀 엔디안
규약에 의해, 32 비트 IP 주소의 각 바이트는 10진수로 표현되며, 점으로 구분된다.
dotted decimal 표기법
#include <arpa/inet.h>
int inet_pton(AF_INET, const char *src, void *dst);
// AF_INET : 32비트 IPv4 주소, src : dotted-decimal 문자열, dst : 변환된 IP 주소가 담길 포인터
// 성공시 1
// src가 유효한 dotted-decimal 문자열을 가리키지 않는다면 0
// 그 외 에러 -1
const char *inet_ntop(AF_INET, const void *src, char *dst, socklen_t size);
// AF_INET : 32비트 IPv4 주소, src : 네트워크 바이트 순서를 갖는 IP 주소, dst : dotted-decimal 문자열이 담기는 곳, size : 복사할 사이즈
// 성공시 dotted-decimal 문자열의 포인터
// 그 외 에러 NULL