我最近开始在python中编程,我在理解inet_nota
和inet_aton
在Python中的工作方式时遇到了一些麻烦。来自php / mysql我总是将数据库中的ip地址存储为长变量。此外,mysql中的inet_ntoa
方法接收一个长变量作为参数并返回IP的虚线格式,因此我假设Python版本以类似的方式工作。但是,似乎Python的inet_ntoa
需要一个32位的二进制格式。因此,将IP地址存储为167772160
值,如何将其转换为\x7f\x00\x00\x01
方法所需的32位压缩二进制值(如inet_ntoa
)?
非常感谢
答案 0 :(得分:13)
在Python 3.3+中(或者对于2.6和2.7使用this backport),您只需使用ipaddress
:
import ipaddress
addr = str(ipaddress.ip_address(167772160))
assert addr == '10.0.0.0'
或者,您可以手动打包值
import socket,struct
packed_value = struct.pack('!I', 167772160)
addr = socket.inet_ntoa(packed_value)
assert addr == '10.0.0.0'
您可能也对inet_pton
感兴趣。
答案 1 :(得分:2)
from struct import pack
n = pack("!I", 167772160)
答案 2 :(得分:0)
作为此主题的后期补充:如果您使用的是Python 3.3或更高版本,请查看ipaddress模块:它比socket
等效功能更强大。