一、写在前面
今天看项目的时候,想找一个ip地址,但是看到打印的日志里面却有一个长长的十进制 322237939
然后就产生了疑惑,ip地址不是182.232.231.174这种形式的吗?怎么需要转成十进制,怎么映射到十进制
二、需求在哪里
我在想 322237939 这种表示ip地址的方式 比 “192.168.9.115” 这种表示方法好在哪?
我能想到的一点,就是存数据库的时候,int上面建索引比string建索引要高效
三、点分十进制的由来
查了下资料,我们平时用的那种形式192.168.9.115,并不是最开始的
最开始的ip地址,规定是4个字节
例如一个采用二进制形式的IP地址是
“00001010000000000000000000000001”
当然,这个二进制就是一个普通的二进制,可以转换成十进制,十六进制
只不过人们记忆这串这么长的数字不方便,所以就发明了“点分十进制”,类似于人民币千位逗号表示一样,方便人们记忆
上面那一串二进制就被切成四个,然后变成10.0.0.1 ,方便记忆
四、怎么换算
怎么把 322237939 映射成 “192.168.9.115”
首先把 322237939 换成十六进制 ,也就是 C0 A8 09 73(16进制)
然后十六进制,没两个就是表示一个字节,就是
C0 -> 192
a8 -> 168
09 -> 09
73 -> 115
像上面一样,转成十进制,就得到了我们平时看到的,192.168.9.115这种ip地址形式
五、扩展
能否用你熟悉的语言写一个函数呢 IpFormat(322237939)= “192.168.9.115”?