linux网络编程-常用IP地址转换

代码分析 client.c

  程序分析client.c

//Example Program source of inet_pton
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.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]);
	//参数1表面即将读取的参数2是IPv4,还是IPv6。以便进行转化
	s = inet_pton(domain, argv[2], buf);
	if (s <= 0) 
	{
		if (s == 0)
		{
			fprintf(stderr, "Not in presentation format");
		}
		else
		{
			perror("inet_pton");
		}
		exit(EXIT_FAILURE);
	}
	if (domain == AF_INET)
	{
		printf("Binary address %X\n", ntohl(((struct in_addr *)buf)->s_addr));
	}
	if (domain == AF_INET6)
	{
		int i;
		printf("Binary address ");
		for (i = 0; i<sizeof(struct in6_addr); i++)
		{
			printf("%X", ((struct in6_addr *)buf)->s6_addr[i]);
		}
		printf("\n");
	}
	if (inet_ntop(domain, buf, str, INET6_ADDRSTRLEN) == NULL) 
	{
		perror("inet_ntop");
		exit(EXIT_FAILURE);
	}

	printf("%s\n", str);

	exit(EXIT_SUCCESS);
}

执行结果

  可以看到转换成功
执行结果