long next = ntohl( inet_addr("192.168.1.1"))+1;char buf[20];// 1)struct in_addr new_addr;
new_addr.s_addr= htonl( next );strcpy( buf, inet_ntoa( new_addr ));// 2)sprintf(buf,"%d.%d.%d.%d",
next /(256*256*256),
next %(256*256*256)/(256*256),
next %(256*256)/(256),
next %256);printf("%s", buf);// "192.168.1.2"
1. inet_addr("192.168.1.1") -> 해당 문자열을 network order uint32_t 형으로 변환합니다.
2. ntohl(inet_addr("192.168.1.1"))+1 -> 1번에서 변환한 uint32_t 형 데이터를 +1 해주기 위해 host order 로 변환합니다.
3. htonl(ntohl(inet_addr("192.168.1.1"))+1); -> host order로 변환한 데이터를 다시 network order로 변환 합니다.
4. inet_ntoa(*(struct in_addr *)&htonl(ntohl(inet_addr("192.168.1.1"))+1));
->network order로 변환된 uint32_t 타입의 데이터를 *(struct in_addr *)& 강제 형변환 시켜 inet_ntoa 함수를 이용해 문자열로 변환 합니다.
long next = ntohl( inet_addr(
좋은 하루 되세요!
답변감사드립니다.
제가 생각한 것 보다 'struct in_addr' 을 사용하면 비교적 간단하게 사용가능하네요.
감사합니다.
자답입니다.
안녕하세요 위 질문에 대한 자답을 올립니다.
생각보다 빨리 해결되어 위 문제에 대한 해결 방안을 적겠습니다.
1. inet_addr("192.168.1.1") -> 해당 문자열을 network order uint32_t 형으로 변환합니다.
2. ntohl(inet_addr("192.168.1.1"))+1 -> 1번에서 변환한 uint32_t 형 데이터를 +1 해주기 위해 host order 로 변환합니다.
3. htonl(ntohl(inet_addr("192.168.1.1"))+1); -> host order로 변환한 데이터를 다시 network order로 변환 합니다.
4. inet_ntoa(*(struct in_addr *)&htonl(ntohl(inet_addr("192.168.1.1"))+1));
->network order로 변환된 uint32_t 타입의 데이터를 *(struct in_addr *)& 강제 형변환 시켜 inet_ntoa 함수를 이용해 문자열로 변환 합니다.
감사합니다.
댓글 달기