Python中的网络掩码前缀和点分十进制格式转换

时间:2017-12-19 04:10:15

标签: python algorithm

在我提出这个问题之前, 我在这里找到相关的帖子: .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

1 个答案:

答案 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))))

[IDEOne Link]