首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将二进制转换为字符串

将二进制转换为字符串
EN

Stack Overflow用户
提问于 2014-02-28 18:19:27
回答 1查看 122关注 0票数 0

我正在尝试用Python编写一个IP地址程序。然而,当我使用一个小于7的掩码来获取网络ID时,我得到了奇怪的数字。例如,对于IP地址164.36.32.32和子网掩码6,我得到43.0.0.0。请注意,netmask包含以二进制表示的整个IP地址。

代码语言:javascript
复制
if mask<=8:
 print int(netmask[0:mask],2),".0.0.0"
elif mask>8 and mask<=16:
 print int(netmask[0:8],2),".",int(netmask[8:mask],2)
elif mask>16 and mask<=24:
 print int(netmask[0:8],2),".",int(netmask[8:16],2),".",int(netmask[16:mask],2)
elif mask>24 and mask<=32:
print      int(netmask[0:8],2),".",int(netmask[8:16],2),".",int(netmask[16:24],2),".",int(netmask[24:mask],2),
EN

回答 1

Stack Overflow用户

发布于 2014-02-28 20:00:51

Python的标准库包含ipaddress模块,该模块将对IP地址执行最常见的操作。从您的代码中可以看出,IP地址的“二进制”表示实际上是一个由1和0组成的字符串。这不仅比使用整数的效率低得多,而且你会使用比你需要的更多的内存。具体来说,http://docs.python.org/dev/library/ipaddress#ipaddress.IPv4Interface.network上的信息可能会有所帮助。但是,由于这似乎是一个学习练习,我们可能会看看使用您当前的表示法。

我假设您在第二种情况下没有添加".0.0“,在第三种情况下没有添加".0”。

无论是使用字符串还是整数,执行掩码操作的最佳方法是首先处理位,然后将位形式转换为您喜欢的表示形式。定义一个函数来将32位字符串转换为点分四元表示法相对容易。通过仅保留由网络前缀指示的位来构建用于掩码地址的函数也不难。

代码语言:javascript
复制
address = "11110000110011001010101010100001"
assert len(address) == 32

def dotted_quad(address):
    return ".".join(str(int(address[i*8:(i+1)*8], 2)) for i in range(4))

def net_address(address, prefix):
    return dotted_quad(address[:prefix]+"0"*(32-prefix))

print dotted_quad(address)

for prefix in range(32):
    print net_address(address, prefix)

这是打印

代码语言:javascript
复制
240.204.170.161
0.0.0.0
128.0.0.0
192.0.0.0
224.0.0.0
240.0.0.0
240.0.0.0
240.0.0.0
240.0.0.0
240.0.0.0
240.128.0.0
240.192.0.0
240.192.0.0
240.192.0.0
240.200.0.0
240.204.0.0
240.204.0.0
240.204.0.0
240.204.128.0
240.204.128.0
240.204.160.0
240.204.160.0
240.204.168.0
240.204.168.0
240.204.170.0
240.204.170.0
240.204.170.128
240.204.170.128
240.204.170.160
240.204.170.160
240.204.170.160
240.204.170.160
240.204.170.160

看起来是在做你想做的事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22092284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档