进公司时,等爷面试我问了这个题,IP 地址是如何存储的?
今天想起来,写个 Python 的字符串格式 IP 地址与 int 互转。
IPv4 地址转 int:用
.
分割后,通过左移生成高位,此时低 8 位全为 0,用或填充后面的即可;
int 转 IPv4 地址:用与取出低 8 位,再通过右移让高位变低位。(取低 8 位:用 1 与、用 0 或都可以,不过不方便用 0 或,没法指定位数)
"""IPv4 地址与 int 值转换"""
def ip_to_int(ip):
:type ip: str
:rtype: int
int_ = 0
for i in ip.split('.'):
int_ = int_ << 8 | int(i)
return int_
def int_to_ip(int_):
:type int_: int
:rtype: str
ip = []
for _ in range(4):
ip.append(str(int_ & 255))
int_ >>= 8
return '.'.join(ip[::-1])
if __name__ == '__main__':
ips = ['2.2.2.2', '192.168.0.0', '0.0.0.0', '255.0.0.255']
for ip in ips:
assert ip == int_to_ip(ip_to_int(ip))
IP地址(IPV4)是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址(IPV4)通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.000...
本文从此处转载:https://www.cnblogs.com/LeeFire/p/10265702.html
Java 中的 % 运算符并不是取模运算(Modulo Operation),而是取余运算(Complementation)。
计算方法:
对于整数 a,b来说,取模运算和取余运算的过程相同:
求整数商:c=a/b
计算模或者余数:r=a−c×b
只是取模和取余在第一步求商的方法上有所不同:取余运算在取 c的值时,向 0 方向舍入( fix() 函数);而取模运算在计算 c 的值时,向负
不要重复造轮子, google guava 包里面已经提供好了工具类,直接拿来用 !
原理: IPv4 32 位, java 中int 也是32 位, 故可以互转,但是 IPv6 地址需要转为 IPv4 才能转 int
* IPv4 或者 IPv6 地址转换为int类型数字
public static int ip2Integer(String ip) {
InetAddress inetAddress = InetAddresses.forString(ip);
Inet4Address
Python的 socket 库提供了很多用来处理不同IP地址格式的函数,要使用底层网络函数,有时普通的字符串形式的IP地址并不是很有用,需要把它们转换成打包后的32位二进制格式,Python的socke库提供了很多用来处理不同IP地址格式的函数,这里我们使用其中的两个相对标准:inet_aton() 和inet_ntoa()我们来定义convert_ip4_addres...
255)#(0~255),要求每个IPv4地址只能对应到唯一的整数上。如果是非法IPv4,返回invalid IP。128#0#255#255,转换为32位整数的结果为2147549183(0x8000FFFF)1#0#0#0,转换为32位整数的结果为16777216(0x01000000)现以字符串形式给出一个虚拟IPv4地址,限制第1小节的范围为1。输出以上,按照要求输出整型或者特定字符。输入一行,虚拟IPv4地址格式字符串。
IPV4的地址,可以用点分十进制表示,例如:192.168.10.121。与之对应,可以用一个整形数字表示:3232238201。简单将其转化成十六进制形式,进一步得到对应地址的过程是:
hex(3232238201) &amp;gt;&amp;gt;&amp;gt;变&amp;gt;&amp;gt;&amp;gt; 0xc0a80a79 &amp;gt;&amp;gt;&a
《华为机试真题》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议!本文解法非最优解(即非性能最优)。存在一种虚拟IPv4地址,由4小节组成,每节的范围为0~128,以#号间隔,格式如下:
(1-128)#(0-255)#(0-255)#(0-255)
请利用这个特性把虚拟IPv4地址转换为一个32位的整数,IPv4地址以字符串形式给出,要求每个IPvV4地址只能对应到唯一的整数上。
如果是非法IPv4,返回inva