将负数转换为IP地址python

时间:2015-06-26 03:04:35

标签: python-3.x ip ip-address

我试图将长号转换为IP地址,但python不允许我将-ve值转换为long。以下是我的功能,有人可以帮忙吗?

将ip addess从字符串转换为整数

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

提前多多感谢。

1 个答案:

答案 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'