我使用here提供的答案将字符串IP转换为整数。但我没有得到预期的产量。具体来说,方法是
>>> ipstr = '1.2.3.4'
>>> parts = ipstr.split('.')
>>> (int(parts[0]) << 24) + (int(parts[1]) << 16) + \
(int(parts[2]) << 8) + int(parts[3])
但是当我提供值172.31.22.98
时,我得到了2887718498
。但是,我希望看到Google的Guava库提供的值-1407248798
https://google.github.io/guava/releases/20.0/api/docs/com/google/common/net/InetAddresses.html#fromInteger-int-
另外,我已经验证this服务提供了预期的输出,但前面提到的StackOverflow答案提供的所有答案都返回2887718498
请注意,我无法使用任何第三方库。所以我几乎只限于使用手写代码(无导入)
答案 0 :(得分:1)
更好的方法是使用库方法
>>> from socket import inet_aton
>>> int.from_bytes(inet_aton('172.31.22.98'), byteorder="big")
2887718498
这仍然与上面的结果相同
以下是将其视为signed int
的一种方法>>> from ctypes import c_long
>>> c_long(2887718498)
c_long(-1407248798)
没有进口就做(但为什么?以上都是第一方CPython)
>>> x = 2887718498
>>> if x >= (1<<31): x-= (1<<32)
>>> x
-1407248798
答案 1 :(得分:0)
在尝试与OP相同的同时发现了此信息。开发以下内容供我简单理解并让他人受益。
baseIP = '192.168.1.0'
baseIPFirstOctet = (int((baseIP).split('.')[0]))
baseIPSecondOctet = (int((baseIP).split('.')[1]))
baseIPThirdOctet = (int((baseIP).split('.')[2]))
baseIPFourthOctet = (int((baseIP).split('.')[3]))