2015-06-26 129 views
0

我想将长号码转换为IP地址,但python不允许我将-ve值转换为long。以下是我的功能,任何人都可以请帮忙吗?从字符串将负数转换为IP地址python

转换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

非常感谢提前。

+0

如果你尝试会发生什么'socket.inet_ntoa(struct.pack( 'L!'(IP地址+ 2 ** 32)%2 ** 32)'? – Skaperen

+0

可以肯定的:你是否得到*“struct.error:参数超出范围”*? – jfs

回答

1

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'