我有IPv4地址,想要将其转换为32位整数。
我能够使用socket.inet_ntop将IPv4地址转换为字符串,然后将该字符串转换为32位整数
但有直接的方法吗?
答案 0 :(得分:2)
基本格式的IPv4地址是网络字节顺序的32位整数。
我假设你将它作为一个字节序列(因为这是你通常将其移交给inet_ntop
)。
将它转换为python整数所需的是struct
模块及其unpack
方法以及“!I”格式规范(表示网络字节顺序,无符号32位)整数)。看到这段代码:
from socket import inet_ntop, inet_pton, AF_INET
from struct import unpack
ip = inet_pton(AF_INET, "192.168.1.42")
ip_as_integer = unpack("!I", ip)[0]
print("As string[{}] => As bytes[{}] => As integer[{}]".format(
inet_ntop(AF_INET, ip), ip, ip_as_integer))
您当然也可以按字节顺序重建整数:
ip_as_integer = (ip[0] << 24) | (ip[1] << 16) | (ip[2] << 8) | ip[3]