#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> int main(int argc, char **argv) { unsigned char buf[sizeof(struct in6_addr)]; int domain, s; char str[INET6_ADDRSTRLEN]; if(argc != 3){ fprintf(stderr, "usage: %s {i4|i6|<num>} string\n", argv[0]); exit(EXIT_FAILURE); } domain = (strcmp(argv[1], "i4") == 0) ? AF_INET:(strcmp(argv[1], "i6") == 0) ? AF_INET6 : atoi(argv[1]); //IP字符串 ——》网络字节流 s = inet_pton(domain, argv[2], buf); if(s<=0){ if(0 == s) fprintf(stderr, "Not in presentation format\n"); else perror("inet_pton"); exit(EXIT_FAILURE); } //网络字节流 ——》IP字符串 if(inet_ntop(domain, buf, str, INET6_ADDRSTRLEN) == NULL){ perror("inet ntop\n"); exit(EXIT_FAILURE); } printf("%s\n", str); exit(EXIT_SUCCESS); } =============================================================== #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> int main(int argc, char *argv[]) { char ip1[] = "192.168.0.74"; char ip2[] = "211.100.21.179"; struct in_addr addr1, addr2; long l1, l2; l1 = inet_addr(ip1); //IP字符串——》网络字节 l2 = inet_addr(ip2); printf("IP1: %s\nIP2: %s\n", ip1, ip2); printf("Addr1: %ld\nAddr2: %ld\n", l1, l2); memcpy(&addr1, &l1, 4); //复制4个字节大小 memcpy(&addr2, &l2, 4); printf("%s <--> %s\n", inet_ntoa(addr1), inet_ntoa(addr2)); //注意:printf函数自右向左求值、覆盖 printf("%s\n", inet_ntoa(addr1)); //网络字节 ——》IP字符串 printf("%s\n", inet_ntoa(addr2)); return 0; } |
|