在我提出这个问题之前, 我在这里找到相关的帖子: .splitlines
但它的PHP知识。
经过努力,我可以将点分十进制转换为前缀:
e_mask = lambda mask: sum(bin(int(i)).count('1') \
for i in mask.split('.'))
print(e_mask('255.255.255.0')) # there print `24`
但我不知道如何使用24
转换为255.255.255.0
。
答案 0 :(得分:1)
作为@DanD。指出,您可以轻松地将位计数转换为前缀掩码。然后很容易将掩码转换为四个单独的字节,然后转换为字符串:
def bits_to_mask(n):
if n < 0 or n > 32:
raise ValueError('Bit count must be between 0 and 32')
mask = (~((1 << (32 - n)) - 1)) & 0xFFFFFFFF
return '.'.join(map(str, ((mask >> (8 * i)) & 0xFF for i in range(3, -1, -1))))