NetCalcLab

IP 转二进制

把 IPv4 地址转换为 32 位二进制形式。结果既按字节分段显示,也给出连续的 32 位字符串,方便你看清每个字节边界落在哪里。

请输入点分十进制地址。字节中出现前导零会被拒绝,因为含义不明确。

示例:

转换是怎么做的

IPv4 地址是用点分隔的四个十进制数,其中每个数就是一个字节 —— 8 位。所以转成二进制,就是把四个彼此独立的 0 到 255 的数逐个转成 8 位值。字节之间不存在进位,也没有任何相互影响。

一个字节内的位权
位序号       1    2    3    4    5   6   7   8
位权       128   64   32   16    8   4   2   1
           ---   --   --   --   --   -   -   -
取 1 的位     1     1    0    0    0   0   0   0   -> 128 + 64 = 192

手工换算时,把剩下的数依次与每个位权比较:大于或等于该位权就写 1 并减掉,否则写 0 继续往下比较。

示例:把 172.16.5.20 转成二进制

172 → 10101100
16  → 00010000
5   → 00000101
20  → 00010100

以 172 为例:172 ≥ 128 记 1,剩 44;44 < 64 记 0;44 ≥ 32 记 1,剩 12;12 < 16 记 0;12 ≥ 8 记 1,剩 4;4 ≥ 4 记 1,剩 0;最后两位都是 0。结果是 10101100,验算 128 + 32 + 8 + 4 = 172。

完整地址:10101100.00010000.00000101.00010100

网络边界落在哪里

二进制真正好用的地方在于配合掩码。把掩码写在地址下面,再按前缀长度画一条线,网络与主机的分界立刻就出来了。

192.168.1.10/24
地址      11000000.10101000.00000001.00001010
掩码      11111111.11111111.11111111.00000000
          |<------ 网络位 24 位 ------>|<- 主机位 ->|
网络地址  11000000.10101000.00000001.00000000   (192.168.1.0)
广播地址  11000000.10101000.00000001.11111111   (192.168.1.255)

网络地址就是把所有主机位置 0 后的地址,广播地址则是把所有主机位置 1。这两种运算各自只是与掩码的一次按位 AND 与按位 OR —— 路由器与主机内部正是这么算的。

常见错误

  • 丢掉前导零。10.0.0.1 是 00001010.00000000.00000000.00000001,不是 1010.0.0.1。拼接前必须把每个字节补齐到 8 位。
  • 把位序写反。最左边一位是最高位,位权是 128 而不是 1。写反会得到一个看起来合理、实际错误的答案。
  • 把地址当成一个 32 位数再整体转换。算出来的数值一样,但会丢掉字节边界,网络与主机的分界就看不清了。
  • 忘了 255 就是全 1。以 .255 结尾的广播地址,最后一个字节全是 1,这正是它位于地址块顶部的原因。

其他转换: 二进制转 IP · IP 转十六进制 · 十六进制转 IP · IP 转十进制 · 十进制转 IP

参考:字节与二进制对照

子网掩码字节可能出现的九种取值,以及地址中常见的几个字节。

十进制字节及其二进制形式
十进制二进制十六进制典型用途
00000000000掩码的主机字节、未指定地址
10000000101子网内第一个主机
10000010100A10.0.0.0/8 私有地址块的第二个字节
1281000000080/25 子网掩码字节
16810101000A8192.168.x.x 的第二个字节
19211000000C0/26 掩码字节;也是 192.168.x.x 的第一个字节
22411100000E0/27 掩码字节;组播地址范围的起点
24011110000F0/28 掩码字节
24811111000F8/29 掩码字节
25211111100FC/30 掩码字节
25411111110FE/31 掩码字节
25511111111FF/32 掩码字节、广播字节

本页属于一组转换页:反向转换见 二进制转 IP,也可以查看 十六进制、十进制以及 完整 IP 转换器。

常见问题

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

把四个字节各自转成 8 位二进制数,并保留它们之间的点号。以 192.168.1.1 为例,192、168、1、1 分别变成 11000000、10101000、00000001、00000001,合起来是 11000000.10101000.00000001.00000001。去掉点号就是同一个 32 位连续字符串。

为什么总是 32 位?

IPv4 地址固定是 32 位宽,拆成四个 8 位字节。每个字节都必须补齐到 8 位,所以地址 1.1.1.1 的二进制是 00000001.00000001.00000001.00000001,而不是 1.1.1.1。漏写前导零是手工换算中最常见的错误,因为丢掉零会让字节之间的边界变得不明确。

一个字节内的位权分别是多少?

从左到右依次是 128、64、32、16、8、4、2、1。把取值为 1 的位权相加就得到该字节的十进制值,最大值是 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255,这也是字节永远不会超过 255 的原因。

怎么知道网络部分到哪里结束?

看前缀长度。在 192.168.1.10/24 中,前 24 位是网络部分、后 8 位是主机部分,所以二进制会分成 11000000.10101000.00000001 | 00001010。分界线左边的内容标识子网,右边的内容标识该子网内的主机。

IPv6 地址也能转成二进制吗?

可以,但结果是 128 位而不是 32 位,这也是 IPv6 地址通常改用十六进制分组表示的原因。本站的 IPv6 计算器会同时给出完整的 128 位二进制形式与压缩、展开后的十六进制写法。

既然没人会手写二进制,学它有什么用?

因为一旦看到二进制,子网掩码和通配符掩码就变得一目了然。/26 掩码的十进制是 255.255.255.192,几乎看不出含义;但写成 11111111.11111111.11111111.11000000,你可以立刻数出 26 个 1 并看到主机位边界。ACL 的通配符掩码正好是该模式的取反,用二进制来读要不容易出错得多。