进制转换工具:IP、DEC、BIN、HEX 互转

看到 3232235777 知道是 192.168.1.1 吗?看到 0xC0A80101 呢?这个工具一秒给你答案。

背景

数通工程师遇到的"神秘数字":

数字 是啥?
3232235777 192.168.1.1 转十进制
0xC0A80101 192.168.1.1 转十六进制
11000000.10101000.00000001.00000001 192.168.1.1 二进制
-1062731487 192.168.1.1 有符号十进制

每次都在脑子里转一遍?太累。

工具能做什么

进制转换工具

任填一个输入框,自动显示其他三种格式。

支持的格式: - ✅ 192.168.1.1(点分十进制 IP) - ✅ 3232235777(无符号十进制) - ✅ 11000000.10101000.00000001.00000001(32 位二进制) - ✅ C0A801010xC0A80101(十六进制)

使用场景

场景 1:日志里的 IP 转可读格式

WAF 告警:源 IP 0xC0A80101 大量访问 /admin
→ 0xC0A80101 = 192.168.1.1(来自内网!)

场景 2:路由表里的奇怪数字

bgp table: 3232235777/32
→ 192.168.1.1/32(精确路由)

场景 3:配置 IPsec/IKE 协商参数

某些厂商(华为)的 IKE peer 配置用十六进制 IP。

场景 4:理解网络字节序

192.168.1.1 的十六进制 C0A80101 —— 是网络字节序(大端序)。

核心实现

Python 一行解决:

import ipaddress

# IP → int
ip = ipaddress.IPv4Address('192.168.1.1')
num = int(ip)                          # 3232235777

# int → IP
ipaddress.IPv4Address(3232235777)     # 192.168.1.1

# int → hex
format(3232235777, '08X')             # 'C0A80101'

# int → bin
format(3232235777, '032b')            # '11000000101010000000000100000001'

二进制分组:

b = format(3232235777, '032b')
# '11000000101010000000000100000001'
parts = [b[i:i+8] for i in range(0, 32, 8)]
# ['11000000', '10101000', '00000001', '00000001']

有符号转换:

def to_signed(n):
    if n >= 2**31:
        return n - 2**32
    return n

to_signed(3232235777)   # 3232235777(小于 2^31,正数不变)
to_signed(2**31)        # -2147483648(有符号最小值)

在线使用

👉 进制转换

进阶:网络字节序

记住这点:网络传输总是大端序

192.168.1.1 转二进制后,192 在前,1 在后 —— 这就是网络字节序。

如果看到小端序的数字(比如 0x0101A8C0),那是有人搞反了或者用了不同的库。

数字彩蛋

192.168.1.1 = 3232235777 = 0xC0A80101
             └─ Google "3232235777" 是工程师的成年礼

📱 关注「网英的日常」,每天学一个数通技巧!