0x00前言
为了使得项目支持IP地址的C段查询,提高查询数据,计划先把IP地址”点分十进制”字符串表示转换为数值表示
0x01 利用inet_aton()函数:
1 | def ip_to_int(ip): |
0x02 原理分析:
IP地址是一个32位的二进制数,为了方便人们记忆,通常被分割为4个“8位二进制数”(也就是4个字节),称这种方式为“点分十进制”。
例:
IP地址11001010010111010111100000101101
点分十进制应该表示为202.93.120.45
ip字符串转换int
转换算法是:将ip字符串以“.”分割开为4个段存储于数组a[0],a[1],a[2],a[3](a[0]为左起第一段);转换结果为a[0]<<8*3+a[1]<<8*2+a[2]<<8*1+a[3]
ip int转换字符串(点分十进制)
转换算法为:i&0x000000ff+’.’+(i&0x0000ff00)>>8+’.’+(i&0x0000ff0000)>>16+’.’+(i&0xff000000)>>24
0x03 pymongo实例:
1 | # !/usr/bin/python |