在Python中使用inet_ntoa函数

2024-03-29 05:43:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始用python编程,我在理解inet_notainet_aton如何在python中工作时遇到了一些困难。来自php/mysql,我总是将ip地址作为长变量存储在数据库中。而且mysql中的inet_ntoa方法接收一个长变量作为参数并返回IP的点格式,因此我假设Python版本的工作方式与此类似。然而,Python的inet_ntoa似乎需要32位压缩二进制格式。因此,将IP地址存储为167772160值,如何将其转换为inet_ntoa方法所需的32位压缩二进制值(如\x7f\x00\x00\x01)?

非常感谢


Tags: 方法ip数据库参数地址格式编程mysql
3条回答

在Python 3.3+中(或者对于2.6和2.7使用this backport),您只需使用^{}

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'

你也可能对^{}感兴趣。

作为这个线程的后期添加:如果您使用的是Python 3.3或更高版本,请查看ipaddress模块:它比socket等效模块的功能要多得多。

from struct import pack

n = pack("!I", 167772160)

相关问题 更多 >