首页/网络/IP 与子网速查/掩码的十六进制速记
掩码与 CIDR 速算50 条

掩码的十六进制速记

程序中掩码常以 0xFFFFFFFF 形式出现:每段 255 = FF,掌握 80/C0/E0/F0/F8/FC/FE 序列即可读懂工具输出与调试 iptables/ipset。

IP 与子网速查网络更新于 2026-10-13

掩码的十六进制写法

程序与系统工具常把掩码表示成 32 位整数:每 8 位对应十进制掩码的一段,255 对应 FF,所以 /24 写作 0xFFFFFF00、/26 写作 0xFFFFFFC0。掌握末段的十六进制序列 80、C0、E0、F0、F8、FC、FE、FF,就能在读 ipset、iptables 与各类程序输出时直接换算,不必回退到十进制。

基本信息

换算基础1 个十六进制位等于 4 个二进制位,2 位等于 1 个十进制段
整段值255 对应 FF,128 对应 80,192 对应 C0
常见整掩码/8 是 0xFF000000,/16 是 0xFFFF0000,/24 是 0xFFFFFF00
末段序列80、C0、E0、F0、F8、FC、FE、FF 依次对应 /25 到 /32
使用场合ipset、iptables 的 u32 匹配、程序内部掩码常量、路由平台导出的配置

末段十六进制对照

前缀末段 HEX十进制
/24000
/2580128
/26C0192
/27E0224
/28F0240
/29F8248
/30FC252
/31FE254
/32FF255

常见掩码的十六进制

常见掩码的十六进制
/8   0xFF000000
/12  0xFFF00000
/16  0xFFFF0000
/20  0xFFFFF000
/24  0xFFFFFF00
/26  0xFFFFFFC0
/28  0xFFFFFFF0
/30  0xFFFFFFFC
/32  0xFFFFFFFF

程序验证

程序验证
import ipaddress
print(int(ipaddress.ip_network('0.0.0.0/26').netmask) == 0xFFFFFFC0)   # True
for p in (24, 25, 26, 27, 28, 29, 30, 31, 32):
    print(p, hex(int(ipaddress.ip_network(f'0.0.0.0/{p}').netmask)))

典型使用场景

  • 读 ipset 或 nftables 导出的规则,看到 C0 立刻能判定是 /26 范围
  • 写程序做地址匹配时用掩码常量代替硬编码十进制,可读性与可移植性更好
  • 核对设备导出的配置,把十六进制掩码还原成前缀长度后与规划表比对
  • 调试内核模块或抓包工具的偏移量过滤,掩码以十六进制表达最自然
  • 跨平台搬迁时统一按十六进制核对掩码,避免各系统十进制表达差异导致的误读

换算与自查

  • 拿到十六进制掩码先数位数:8 个十六进制位才是完整掩码,位数不足说明写错了
  • 从高位往低位数为 1 的二进制位个数,就是前缀长度,例如 F0 是 4 个 1,对应末段 4 位
  • 掩码十六进制必然是一串连续的 1 后面跟一串 0,出现 0 与 1 交替说明该值不是合法掩码
  • 核对通配符时要记住它是掩码的按位取反:掩码 F0 对应通配符 0F
记忆技巧:末段每加一位前缀,就相当于把当前值右移一位再补 1。80 右移补 1 得 C0,C0 右移补 1 得 E0,依次类推,序列不会记错。
整掩码的十六进制有规律可循:/8 之后每 4 位前缀对应一个十六进制位由 0 变 F,记住 F0 对应 4 位、FF 对应 8 位,中间值可以按位推算。

易错点

  • 把 0xFFFFFF00 当作 /8:每两个十六进制位对应一个十进制段,0xFFFFFF00 是 /24
  • 少写一位 F:0xFFFFFF0 这类数值位数不足,掩码变成一个错误的值,某些工具不会报错而是静默错用
  • 把十六进制掩码与通配符掩码混用:ACL 的通配符是掩码的按位取反,两者数值规律完全不同
  • 心算末段时错位:C0 是 /26 而非 /27,拿不准时用程序换算一遍更稳妥

数据来源与参考

  • RFC 4632(CIDR)
  • Linux ipset/iptables 手册

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌