四个比特一位十六进制
二进制与十六进制之间是 4 位对 1 位的固定映射,一个字节正好写成两位十六进制;十进制与它们之间没有捷径,只能按位权展开或除基取余。实际工作里绝大多数转换发生在字节层面:看内存、看协议字段、看颜色值,关键是把「数值」和「字节序列」分开考虑,前者与进制有关,后者还与字节序有关。
基本信息
| 对应关系 | 1 位十六进制等于 4 位二进制,1 字节等于 8 位等于 2 位十六进制 |
|---|---|
| 十进制 255 | 二进制 11111111,十六进制 FF,是无符号单字节最大值 |
| 常用工具 | Python 的 bin/hex/int、printf、xxd、od、PowerShell 的 Format-Hex |
| 补零惯例 | 按字节对齐补零,如 0x0A 不写作 0xA,避免位宽歧义 |
| 字节序 | 多字节数值在内存中的顺序分大端与小端,与进制无关 |
典型使用场景
- 读抓包或内存转储,把十六进制字节还原成数值
- 写协议实现,确认字段宽度与字节序
- 核对校验和、掩码与 IP 换算
- 看颜色值与时序参数,这些普遍用十六进制表示
- 排查数据不一致:区分是数值错还是字节序错
转换示例
转换示例
# 数值层:进制之间互转
int('FF', 16) # 255
int('11111111', 2) # 255
hex(255) # '0xff'
bin(255) # '0b11111111'
# 字节层:字节序列与十六进制串互转
bytes([0x0A, 0xFF]).hex() # '0aff'
bytes.fromhex('0a ff') # b'\n\xff'
int.from_bytes(b'\x12\x34', 'big') # 4660,大端
int.from_bytes(b'\x12\x34', 'little') # 13330,小端位宽速查
| 单位 | 位数 | 十六进制位数 | 十进制范围(无符号) |
|---|---|---|---|
| 半字节 | 4 | 1 | 0 到 15 |
| 字节 | 8 | 2 | 0 到 255 |
| 双字节 | 16 | 4 | 0 到 65535 |
| 四字节 | 32 | 8 | 0 到 4294967295 |
| 八字节 | 64 | 16 | 0 到 2 的 64 次方减 1 |
同一个字节序列按大端与小端解释会得到两个不同数值,例如 12 34 大端是 4660、小端是 13330。判断字节序优先看协议文档或文件格式规范,而不是靠猜:常见的网络字节序是大端。
容量单位要区分十进制与二进制:存储厂商标称的 GB 多为 10 的 9 次方,而操作系统显示的 GiB 是 2 的 30 次方,两者相差约 7%,这是「买来 500G 只剩 465G」这类疑问的来源。