ip的char*和unsigned int转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/glw0223/article/details/88787197

unsigned int 转 char*

union ip_t
{
	unsigned int ipi;
	struct ip_byte
	{
		unsigned char byte[4];
	} ipb;
};
//本机字节序转char*
//这里认为本机是小端
char* ip2str_internal(unsigned int host_order_ip, char *str, size_t sz)
{
	union ip_t my_ip;

	my_ip.ipi = host_order_ip;

	memset(str, 0, sz);
	snprintf(str, sz, "%u.%u.%u.%u",
		(unsigned int)my_ip.ipb.byte[3],
		(unsigned int)my_ip.ipb.byte[2],
		(unsigned int)my_ip.ipb.byte[1],
		(unsigned int)my_ip.ipb.byte[0]);
	return str;
}
const char* ip2str(unsigned int host_order_ip)
{
	static char buf[128];
	memset(buf, 0, sizeof(buf));

	ip2str_internal(host_order_ip, buf, sizeof(buf));
	return buf;
}
//这里是网络字节序,大端
char* ip2str_net_order_internal(unsigned int network_order_ip, char *str, size_t sz)
{
	union ip_t my_ip;

	my_ip.ipi = network_order_ip;

	memset(str, 0, sz);
	snprintf(str, sz, "%u.%u.%u.%u",
		(unsigned int)my_ip.ipb.byte[0],
		(unsigned int)my_ip.ipb.byte[1],
		(unsigned int)my_ip.ipb.byte[2],
		(unsigned int)my_ip.ipb.byte[3]);
	return str;
}
const char* ip2str_net_order(unsigned int network_order_ip)
{
	static char buf[128];

	ip2str_net_order_internal(network_order_ip, buf, sizeof(buf));
	return buf;
}

char* 转 unsigned int

//ip转unsigned int
int ipstr2ip(const char *ip, unsigned int *result)
{
    if (NULL == result)
        return -1;

    unsigned int ret;

    ret = inet_addr(ip);
    if (INADDR_NONE != ret) {
        *result = ntohl(ret);
        return 0;
    }
    return -1;
}

猜你喜欢

转载自blog.csdn.net/glw0223/article/details/88787197