我试图将长号转换为IP地址,但python不允许我将-ve值转换为long。以下是我的功能,有人可以帮忙吗?
def get_ip_address_int(ip_address):
return struct.unpack("!L", socket.inet_aton(ip_address))[0]
# Convert ip adress from integer to string
def get_ip_address_str(ip_address):
return socket.inet_ntoa(struct.pack('!L',ip_address))
ip_address = -1277278613
提前多多感谢。
答案 0 :(得分:2)
L
表示无符号长。 -1277278613
已签名。假设输入必须是32位(ipv4),那么-1277278613
可能对应于不同的位模式,具体取决于字节顺序:
>>> socket.inet_ntoa(struct.pack('<i', -1277278613))
'107.70.222.179'
>>> socket.inet_ntoa(struct.pack('>i', -1277278613))
'179.222.70.107'
如果没有保留符号,那么你也不应该假设网络字节顺序(big-endian)。
如果您认为输入使用本机字节顺序;你可以使用=
(标准尺寸):
>>> socket.inet_ntoa(struct.pack('=i', -1277278613))
'107.70.222.179'