我得到了以下十进制IP:" 3232235876"它代表" 192.168.1.100"
我通过以下方式得到它:
//GET IP
if (gethostname(hostname, sizeof(hostname)) == SOCKET_ERROR) {
printf("%s","host not found");
}
struct hostent *phe = gethostbyname(hostname);
memcpy(&addr, phe->h_addr_list[0], sizeof(struct in_addr));
//Convert IP to Decimal notation
sprintf(decResult,"%u", addr);
sprintf(decResult,"%u", htonl(atoi(decResult)));
But now is my question how do I reconvert it to the Dotted Decimal Notation?
我知道' inet_ntoa'功能,但我首先需要得到' 3232235876'转换了其他东西,然后我需要将其转换为addr。
对于这两个问题,我都不知道答案:/
亲切的问候。
答案 0 :(得分:4)
使用inet_ntoa
将地址转换为字符串:
if (gethostname(hostname, sizeof(hostname)) == -1) {
printf("host not found");
return;
}
struct hostent *phe = gethostbyname(hostname);
if (phe == NULL) {
printf("Could resolve %s!", hostname);
return;
}
struct in_addr **addr_list = (struct in_addr **)phe->h_addr_list;
char *addr_str = inet_ntoa(*addr_list[0]);
你也可以像这样迭代地址列表:
for (int i = 0; addr_list[i] != NULL; i++) {
printf("%s ", inet_ntoa(*addr_list[i]));
}
请参阅this gethostbyname man page中的示例代码。请注意,gethostbyname
已弃用,因为它不适用于IPv6。您应该使用getaddrinfo
代替。再次,see the man page for example code。