IP 转十进制 / 二进制 / 十六进制
IPv4 ↔ uint32 整数 · 数据库存储优化 / GeoIP 查询必备
点分↔十进制↔Hex↔二进制
IPv4 ↔ uint32 整数 · 数据库存储优化 / GeoIP 查询必备
公式:IPv4 = (A × 2^24) + (B × 2^16) + (C × 2^8) + D。即 192.168.1.1 = 192 × 16777216 + 168 × 65536 + 1 × 256 + 1 = 3232235777。
数据库优化:用 INT UNSIGNED (4 字节) 存 IP 比 VARCHAR(15) (15+ 字节) 省 ~70% 空间,索引更快。
GeoIP 查询:IP 段表用 [start_int, end_int] 区间查询,O(log n) 索引扫描,远快于字符串比较。
了解工具定位 · 使用场景 · 对比优势
在点分十进制、十进制、十六进制和二进制四种格式间互转 IP 地址。网络工程师排查路由表、运维人员配置防火墙规则、开发者在代码里处理 IP 数据时,省去手动换算的麻烦。所有转换在浏览器本地完成,IP 地址不上传服务器。
网络工程师在排查路由表或防火墙日志时,经常看到类似 3232235521 的十进制 IP。手动换算成点分十进制(如 192.168.1.1)非常耗时且易出错。本工具支持一键将十进制 IP 转回点分格式,同时提供十六进制和二进制对照,帮助快速定位设备地址,缩短故障排查时间。
安全分析人员从攻击日志中提取到一串十进制数字(如 2886729731),需要确认其对应的公网 IP。本工具即时转换并显示点分十进制与十六进制,便于在威胁情报平台中交叉查询。无需手动计算,避免因换算错误导致遗漏攻击源。
计算机专业学生在学习 IP 地址结构时,需要理解点分十进制、二进制、十六进制之间的转换关系。教师可借助本工具现场演示:输入 192.168.1.1,立即看到其二进制 11000000.10101000.00000001.00000001 和十六进制 C0A8:0101,直观展示各进制对应关系,辅助课堂讲解。
运维人员在做子网划分或 ACL 配置时,需要将多个点分十进制 IP 转为十进制以便在脚本或数据库中比较大小。本工具支持逐个输入转换,结果可复制粘贴到文本中。相比手动用计算器逐位换算,大幅提升批量处理效率,减少人为计算错误。
| 维度 | 本工具 | 竞品 A (ipaddress.com) | 传统方法 (计算器/手算) |
|---|---|---|---|
| 数据隐私 | 纯浏览器,零上传 | 上传到服务器处理 | 完全本地,但依赖人工操作 |
| 处理速度 | 1 秒内 | 2-5 秒(含网络延迟) | 10 秒至数分钟(视熟练度) |
| 离线可用 | 完全离线 | 需联网 | 完全离线(需计算器/纸笔) |
| 格式覆盖 | 点分 ↔ 十进制 ↔ Hex ↔ 二进制 | 点分 ↔ 十进制为主 | 需手动换算,易出错 |
| 批量处理 | 单次单 IP | 单次单 IP | 可批量但极耗时 |
| 操作门槛 | 输入即出,零学习成本 | 输入即出 | 需理解进制换算原理 |
| 收费 | 免费 | 免费 | 免费(仅需计算器) |
| 注册 | 无需注册 | 无需注册 | 无需注册 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 192.168.1.1 | 十进制: 3232235521 十六进制: 0xC0A80101 二进制: 11000000101010000000000100000001 | 典型场景:家庭局域网常用地址 |
| 10.0.0.1 | 十进制: 167772161 十六进制: 0x0A000001 二进制: 00001010000000000000000000000001 | 典型场景:A 类私有地址段常用网关 |
| 255.255.255.255 | 十进制: 4294967295 十六进制: 0xFFFFFFFF 二进制: 11111111111111111111111111111111 | 边界 case:IPv4 最大值(广播地址) |
| 0.0.0.0 | 十进制: 0 十六进制: 0x00000000 二进制: 00000000000000000000000000000000 | 边界 case:IPv4 最小值(默认路由) |
| 127.0.0.1 | 十进制: 2130706433 十六进制: 0x7F000001 二进制: 01111111000000000000000000000001 | 典型场景:本地回环地址(localhost) |
| 3232235521 | 点分十进制: 192.168.1.1 十六进制: 0xC0A80101 二进制: 11000000101010000000000100000001 | 易错 case:直接输入十进制数自动反向转换 |
| 0xC0A80101 | 点分十进制: 192.168.1.1 十进制: 3232235521 二进制: 11000000101010000000000100000001 | 易错 case:输入十六进制前缀 0x 自动识别 |
| 256.1.1.1 | 错误:每段数值必须在 0-255 之间 | 边界 case:输入超范围数值触发校验 |
192.168.1.1/24192.168.1.1工具只处理单个 IP 地址的点分十进制、十进制、Hex 或二进制之间的互转,不支持 CIDR 前缀(/24)或其他子网掩码格式
3232235521.03232235521十进制 IP 是一个 0~4294967295 的整数,不含点号。带点号会被解析为非法格式,导致转换失败或错误
C0A801010xC0A80101工具要求 Hex 输入以 0x 开头(不区分大小写),且必须是 8 位十六进制数(不含点)。缺少前缀或位数不足会被当作其他格式处理
11000000101010000000000111000000101010000000000100000001IPv4 二进制表示固定 32 位,不足 32 位时工具无法确定高位补 0 还是截断,必须补全到 32 位
1923232235521十进制模式要求输入整个 IP 的十进制数值,不是点分十进制中的某一段(如 192)。192 是点分十进制中第一段,对应十进制是 3232235521
2001:db8::1192.168.1.1该工具仅支持 IPv4 格式转换。IPv6 地址(128 位)结构完全不同,无法用此工具处理
192.168.001.001192.168.1.1部分系统允许前导零,但非标准。工具按严格点分十进制解析,前导零可能导致被解释为八进制(如 010=8)或直接报错
输入 0xC0A80101 后,把输出的 3232235521 又当作十六进制输入确认输出格式:Hex 输入 → 十进制输出;十进制输入 → Hex 输出工具双向转换,输出格式由输入格式决定。若输入是 Hex,输出是十进制数;若想得到 Hex 结果,需输入十进制或点分十进制
公式推导 · 流程图解 · 依据出处
D = d_3 × 256^3 + d_2 × 256^2 + d_1 × 256 + d_0
D — 十进制整数(0~4294967295)d_3 — 点分十进制的第一段(高位)d_2 — 点分十进制的第二段d_1 — 点分十进制的第三段d_0 — 点分十进制的第四段(低位)IP 地址 192.168.1.10 → d_3=192, d_2=168, d_1=1, d_0=10。D = 192×256^3 + 168×256^2 + 1×256 + 10 = 192×16777216 + 168×65536 + 256 + 10 = 3221225472 + 11010048 + 266 = 3232235786。
适用于标准 IPv4 地址(0.0.0.0~255.255.255.255),基于 IETF RFC 791 定义。不适用于 IPv6 地址或非点分格式(如 CIDR 表示法)。
3 种主流语言 · 复制即用
import socket
import struct
# 点分十进制 → 十进制整数
ip_str = "192.168.1.1"
packed = socket.inet_aton(ip_str)
int_val = struct.unpack("!I", packed)[0]
print(int_val) # 3232235777
# 十进制整数 → 点分十进制
int_val = 3232235777
packed = struct.pack("!I", int_val)
ip_str = socket.inet_ntoa(packed)
print(ip_str) # 192.168.1.1
# 十进制 → 十六进制
print(hex(int_val)) # 0xc0a80101
# 十进制 → 二进制
print(bin(int_val)) # 0b11000000101010000000000100000001package main
import (
"fmt"
"net"
"strconv"
"strings"
)
func ipToInt(ip string) uint32 {
parts := strings.Split(ip, ".")
var result uint32
for _, p := range parts {
n, _ := strconv.Atoi(p)
result = result*256 + uint32(n)
}
return result
}
func intToIP(n uint32) string {
return fmt.Sprintf("%d.%d.%d.%d",
byte(n>>24), byte(n>>16), byte(n>>8), byte(n))
}
func main() {
ip := "192.168.1.1"
intVal := ipToInt(ip)
fmt.Println(intVal) // 3232235777
fmt.Println(intToIP(intVal)) // 192.168.1.1
fmt.Printf("%x\n", intVal) // c0a80101
fmt.Printf("%b\n", intVal) // 11000000101010000000000100000001
// 使用标准库 net.ParseIP
parsed := net.ParseIP(ip).To4()
if parsed != nil {
fmt.Println(parsed) // 192.168.1.1
}
}// 点分十进制 → 十进制整数
function ipToInt(ip) {
return ip.split('.').reduce((acc, octet) => acc * 256 + parseInt(octet, 10), 0);
}
// 十进制整数 → 点分十进制
function intToIp(intVal) {
return [
(intVal >>> 24) & 255,
(intVal >>> 16) & 255,
(intVal >>> 8) & 255,
intVal & 255
].join('.');
}
const ip = '192.168.1.1';
const intVal = ipToInt(ip);
console.log(intVal); // 3232235777
console.log(intToIp(intVal)); // 192.168.1.1
console.log(intVal.toString(16)); // 'c0a80101'
console.log(intVal.toString(2)); // '11000000101010000000000100000001'8 个高频疑问
「HTTP / 网络」下的其他工具