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

如何用Python 3.x根据前缀长度获取十进制子网掩码?

简化前缀长度转十进制子网掩码的Python实现

我需要一个工具,输入1-32之间的前缀长度就能输出对应的十进制子网掩码,用来辅助Cisco脚本开发,自己写了一段代码但希望能简化:

import math

# 子网掩码八位组
octet1 = [0,0,0,0,0,0,0,0]
octet2 = [0,0,0,0,0,0,0,0]
octet3 = [0,0,0,0,0,0,0,0]
octet4 = [0,0,0,0,0,0,0,0]

# 幂次列表
pow_list = [7,6,5,4,3,2,1,0]

# 输入前缀长度
mask = int(input("请输入前缀长度: "))

# 根据位数将数组元素从0改为1
while mask >= 25 and mask <= 32:
    octet4[mask-25] = 1
    mask -= 1

while mask >= 17 and mask <= 24:
    octet3[mask-17] = 1
    mask -= 1

while mask >= 9 and mask <= 16:
    octet2[mask-9] = 1
    mask -= 1

while mask >= 1 and mask <= 8:
    octet1[mask-1] = 1
    mask -= 1

# 统计1的数量
ones1 = octet1.count(1)
ones2 = octet2.count(1)
ones3 = octet3.count(1)
ones4 = octet4.count(1)

# 计算每个八位组的数值
sum1 = 0
for i in range(0,ones1):
    sum1 = sum1 + math.pow(2,pow_list[i])
sum1 = int(sum1)

sum2 = 0
for i in range(0,ones2):
    sum2 = sum2 + math.pow(2,pow_list[i])
sum2 = int(sum2)

sum3 = 0
for i in range(0,ones3):
    sum3 = sum3 + math.pow(2,pow_list[i])
sum3 = int(sum3)

sum4 = 0
for i in range(0,ones4):
    sum4 = sum4 + math.pow(2,pow_list[i])
sum4 = int(sum4)

# 拼接结果
decimal_netmask = str(sum1) + "." + str(sum2) + "." + str(sum3) + "." + str(sum4)

# 输出结果
print("十进制子网掩码为: "+ decimal_netmask)

运行示例

输入前缀长度:23
十进制子网掩码为:255.255.254.0


简化后的代码

利用字符串拼接和进制转换可以大幅简化逻辑,去掉冗余的数组操作和循环:

prefix = int(input("请输入前缀长度: "))
# 生成32位二进制掩码字符串:前prefix位为1,其余为0
mask_binary = '1' * prefix + '0' * (32 - prefix)
# 按每8位分割,转十进制后拼接成点分格式
octets = [str(int(mask_binary[i*8:(i+1)*8], 2)) for i in range(4)]
decimal_netmask = '.'.join(octets)
print(f"十进制子网掩码为: {decimal_netmask}")

简化说明

  1. 直接构造二进制掩码:用字符串快速生成32位掩码,替代原代码中多个数组的循环修改操作
  2. 批量处理八位组:通过列表推导式一次性完成分割、进制转换,避免重复的计数和累加逻辑
  3. 无额外依赖:去掉了math库的依赖,代码更轻量易维护

这段简化代码和原代码功能完全一致,输入1-32的前缀长度都能正确输出对应的十进制子网掩码,更适合嵌入Cisco脚本开发中使用。

内容的提问来源于stack exchange,提问作者Jon Reyno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:45:31