2015-06-26 132 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'