概念
IP一般由32位整数组成,按每8位划分为4部分:255.255.255.255 该显示方式为字符串形式,而IP一般是以整数形式显示。下面通过位移和求余取整操作快速实现整数IP转换为字符串IP:
整数IP地址 unsigned int IP_Addr = 1713350848 转化为二进制为:01100110-00011111-10101000-11000000 根据8位划分得到结果为102-31-168-192,由于网络字节倒序的问题,实际IP为192.168.31.102
下面为整数IP和字符串IP之间转换的代码
/* 待转化的整数IP */
unsigned int IP_Addr = 1713350848;
/* 提取IP:位移操作 */
int addr_1 = IP_Addr >> 24; // 提取第一部分IP地址
IP_Addr = IP_Addr << 8;
int addr_2 = IP_Addr >> 24; // 提取第二部分IP地址
IP_Addr = IP_Addr << 8;
int addr_3 = IP_Addr >> 24; // 提取第三部分IP地址
IP_Addr = IP_Addr << 8;
int addr_4 = IP_Addr >> 24; // 提取第四部分IP地址
/* 提取IP:求余取整 */
int addr_1 = IP_Addr % 256; // 提取第一部分IP地址
IP_Addr = IP_Addr / 256;
int addr_2 = IP_Addr % 256; // 提取第一部分IP地址
IP_Addr = IP_Addr / 256;
int addr_3 = IP_Addr % 256; // 提取第一部分IP地址
IP_Addr = IP_Addr / 256;
int addr_4 = IP_Addr % 256; // 提取第一部分IP地址
/* 打印IP地址:结果为"192.168.31.102" */
printf("IP地址为:%d.%d.%d.%d", addr_4, addr_3, addr_2, addr_1);
/********************** 字符串IP转整数就比较简单了 ***************************/
/* 待转换字符串IP */
char * IP_Addr = "192.168.31.102";
/* 提取4部分整数:提取方法很多这里省略 */
int addr_1 = 192;
int addr_2 = 168;
int addr_3 = 31;
int addr_4 = 102;
/* 根据网络字节倒序计算IP整数 */
unsigned int IP_Int = addr_1 + (addr_2 * 256) + (addr_3 * 256 * 256) + (addr_4 * 256 * 256 *256);