如何将32个字符的ip地址转换为二进制点分十进制格式?

2024-10-06 11:24:16 发布

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

IP地址00000011100000001111111111111111将被转换为点状十进制格式:3.128.255.255。这是因为前8位00000011将被转换为3,第2个8位10000000将被转换为128,第3个8位11111111将被转换为255,最后8位11111111将被转换为255。在

如何编写一个函数ip_format(),该函数接受二进制格式的IP地址并将其转换为点分十进制格式?在


Tags: 函数ipformat格式二进制点状
3条回答

当您转换为int时,还可以指定第二个参数作为基(在本例中,2表示二进制)。然后,您可以一次跨越字符串8个元素,最后是join'.'个字符

def ip_format(s):
    return '.'.join(str(int(s[i:i+8], 2)) for i in range(0, 32, 8))

>>> ip_format('00000011100000001111111111111111')
'3.128.255.255'

您可以使用标准库中的^{}模块:

>>> import ipaddress
>>> def ip_format(ip):
...     return str(ipaddress.ip_address(int(ip, 2)))
...
>>> ip_format('00000011100000001111111111111111')
'3.128.255.255'

否则,手动操作非常容易:

^{pr2}$

至于逻辑:将二进制字符串转换为integer,将其拆分为单个字节,将其转换为字符串,并使用"."进行联接。在

def ip_format(s): 
    return '.'.join(str(int(s[n * 8:(n + 1) * 8], 2)) for n in range(4))

相关问题 更多 >