You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何生成指定数量连续1 实现IP前缀转子网掩码

Python实现IP前缀转点分二进制子网掩码

实现思路

核心逻辑完全匹配需求:

  • 先做入参校验:IPv4前缀长度合法范围是0~32的整数,非法输入直接抛出错误
  • 生成总长度32位的原始二进制串:前prefix_len位填充连续的1,剩余位补0
  • 将32位二进制串按每8位为一组切分,组间用.拼接,得到最终要求的格式

完整实现代码

def prefix_to_bin_mask(prefix_len: int) -> str:
    if not isinstance(prefix_len, int) or not 0 <= prefix_len <= 32:
        raise ValueError("IPv4前缀长度必须是0-32之间的整数")
    # 拼接32位二进制掩码
    mask_bin_str = '1' * prefix_len + '0' * (32 - prefix_len)
    # 按8位分段拼接为点分格式
    return '.'.join(mask_bin_str[i:i+8] for i in range(0, 32, 8))

效果验证

测试前缀长度21的场景:

print(prefix_to_bin_mask(21))

运行输出:

11111111.11111111.11111000.00000000

其他常用前缀测试结果:

  • 前缀0:00000000.00000000.00000000.00000000
  • 前缀24:11111111.11111111.11111111.00000000
  • 前缀32:11111111.11111111.11111111.11111111

如果需要同步输出十进制点分格式的子网掩码,只需要在切分后把每段8位二进制转成十进制再拼接即可,扩展逻辑如下:

def prefix_to_decimal_mask(prefix_len: int) -> str:
    if not isinstance(prefix_len, int) or not 0 <= prefix_len <= 32:
        raise ValueError("IPv4前缀长度必须是0-32之间的整数")
    mask_bin_str = '1' * prefix_len + '0' * (32 - prefix_len)
    return '.'.join(str(int(mask_bin_str[i:i+8], 2)) for i in range(0, 32, 8))

# 测试21前缀的十进制掩码,输出255.255.248.0
print(prefix_to_decimal_mask(21))

内容的提问来源于stack exchange,提问作者Nischal Lamichhane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:03:04