NetCalcLab

二进制转 IP

把 32 位二进制串还原为点分十进制 IPv4 地址。带分隔符或不带分隔符都可以,转换器会替你按四个字节分组。

必须正好 32 位。点号和空格都可以作为分隔符,也可以不写。

示例:

把二进制位按字节分组

点分十进制只是为了让人类好读。IPv4 地址本质上是一个 32 位数,点号只是每 8 位画一条分界线。反过来换算就是把这层呈现方式拆掉:把二进制位重新分成四组、每组八位,再各自求值。

把一组 8 位转成十进制
1 0 1 0 1 1 0 0
| | | | | | | |
128 64 32 16 8 4 2 1   <- 位权

取 1 的位:128 + 32 + 8 + 4 = 172
取 0 的位:64、16、2、1 不参与计算

示例:00001010.00000000.00000000.00000001

一组一组来。第一组 00001010 只在 8 这一位取了 1,再加上 2 这一位,得到 10。第二、三组全是 0,得到 0 和 0。最后一组 00000001 只有 1 这一位是 1,得到 1。

结果:10.0.0.1

看第一个字节的前四位是个好用的速判法:0000 是 A 类地址,1000 到 1011 是 B 类,1100 到 1101 是 C 类。

读懂用二进制写的掩码

掩码用二进制表示最自然,因为掩码的定义就是"一串 1 后面跟一串 0"。用点分十进制你得记住哪些字节值合法;用二进制只需要数个 1 的个数。

二进制掩码及其对应前缀
二进制掩码点分十进制前缀可用主机
11111111.11111111.11111111.00000000255.255.255.0/24254
11111111.11111111.11111111.10000000255.255.255.128/25126
11111111.11111111.11111111.11000000255.255.255.192/2662
11111111.11111111.11111111.11100000255.255.255.224/2730
11111111.11111111.11111111.11110000255.255.255.240/2814
11111111.11111111.11111111.11111000255.255.255.248/296
11111111.11111111.11111111.11111100255.255.255.252/302
11111111.11111111.11111111.11111110255.255.255.254/312(RFC 3021)

掩码末尾的那串 0 就是主机位。数它们是最快的定尺寸方法:8 个主机位给 256 个地址,7 个给 128 个,依次类推。

常见错误

  • 补零补到错误的一侧。缺的位永远缺在左边,因为是前导零。往右边补零会彻底改变这个地址。
  • 从右往左读位。第一位(最左边)的位权是 128。方向读反会得到一个看似合理、实际完全镜像的数。
  • 位数不足 32 位时仍从右往左分组。字符串偏短时,先把它补齐到 32 位,然后再分成四个字节。
  • 以为全是 1 的字节一定就是广播地址。只有当前缀把最后一个字节划进主机位时,255 才是广播地址。在 /16 里,10.0.255.1 是一个完全普通的主机地址。

另见: IP 转二进制 · IP 转十六进制 · 十六进制转 IP · IP 转十进制

值得记住的二进制模式

常见二进制前缀及其含义
起始位第一个字节范围含义
000000000本网络 / 未指定地址
00000001 – 011111101 – 126A 类公网地址空间
01111111127环回地址范围
10000000 – 10111110128 – 190B 类公网地址空间
10111111191B 类地址范围上界
11000000 – 11011111192 – 223C 类公网地址空间
11100000 – 11101111224 – 239组播地址(D 类)
11110000 – 11111111240 – 255保留地址(E 类)
11111111.11111111...255.255...广播地址或全 1 掩码

本页属于一组转换页:反向转换见 IP 转二进制,也可以使用 子网计算器 与 CIDR 计算器。

常见问题

如何把二进制转成 IP 地址?

把 32 位分成四组、每组八位,逐组转成十进制后用点号连接。以 11000000.10101000.00000001.00000001 为例,四组分别是 11000000、10101000、00000001、00000001,对应 192、168、1、1,合起来就是 192.168.1.1。

我的二进制没有分隔符怎么办?

从左往右按八位一组切开即可。位序是固定的,永远从最高位开始,所以 11000000101010000000000100000001 会明确地切成 11000000 10101000 00000001 00000001。如果字符串不是正好 32 位,它就不是一个完整的 IPv4 地址 —— 要在左侧补零,而不是在右侧补。

为什么我的二进制只有 31 位或 30 位?

这说明某处的某个前导零被丢掉了。每个字节必须贡献正好八位,总数永远是 32 位。在前面补零就能把缺失的位找回来:1100000101010000000000010000001 不是合法输入,但补齐到 32 位后就是一个有意义的地址。

怎么手工把一组 8 位转成十进制?

把每一位乘以它的位权 —— 128、64、32、16、8、4、2、1 —— 再相加。10101100 就是 128 + 32 + 8 + 4 = 172,因为 64、16、2、1 这几位都是 0。

全是 1 的二进制表示什么?

11111111 就是 255。全为 1 的地址(11111111.11111111.11111111.11111111)是 255.255.255.255,即受限广播地址,会被送到本地链路上的每一台主机,且永远不会被路由转发。

带空格或短横线的二进制串也能转吗?

可以。转换器会先去掉点号、空格等分隔符再分组,所以 11000000 10101000 00000001 00000001 与 11000000.10101000.00000001.00000001 都会得到 192.168.1.1。分组时任何非 0 非 1 的字符都会被忽略,但剩下的位数必须正好是 32 位。