arrow_back返回现场笔记
COMPUTER SCIENCE 已发布 5 Aug 2026

二进制、十六进制和数据单位详解

编程、网络和取证工作中使用的二进制、十六进制和数据单位约定的实用词汇表。

你在十六进制编辑器中检查的每个字节、计算的每个子网掩码、工具报告的每个文件大小都取决于一小组数字系统和单位约定。如果搞错了,你会误判缓冲区大小、误读内存转储,或者和同事争论 1 KB 是 1000 字节还是 1024 字节。

二进制:计算机真正使用的基数

二进制是二进制制,只有 0 和 1。单个二进制数字叫一位。8 位组成一个字节,可以表示 256 个不同的值(无符号 0 到 255,或有符号二进制补码 -128 到 127)。

当你看到 01001000,这是十进制的 72,恰好是 ASCII 字符 'H' 的代码。手工转换就是从最右边的位开始求和 2 的幂:2^6 + 2^3 = 64 + 8 = 72。python3 -c "print(bin(72))"xxd 这样的工具会立即完成,但当你逆向工程位掩码或计算 TCP 头中的标志值时,理解数学原理很重要。

十六进制:二进制的简记法

十六进制是十六进制制,使用 0-9 和 A-F。之所以存在是因为二进制在规模上难以阅读,十进制不能干净地映射到字节边界。一个十六进制数字恰好代表 4 位,所以两个十六进制数字代表一个完整字节——0x00 到 0xFF 覆盖所有 256 个字节值,没有浪费。

这就是为什么十六进制转储是 xxdhexdump -C 或反汇编器内存视图中的默认格式。当你看到文件开始处的 0x4D 0x5A 时,那是 MZ 头,标识 Windows PE 可执行文件。内存地址、颜色代码(#FF5733)、MAC 地址和 IPv6 地址都按惯例用十六进制书写,因为它映射到底层字节和半字节结构非常干净。

十六进制转十进制:0x4D = (4 × 16) + 13 = 77。在 Python 中,int('4D', 16) 能让你不用手工计算就得到结果,hex(77) 则反向转换。

二进制、十进制和十六进制在实践中的交集

IP 地址是三者碰撞的好例子。IPv4 地址如 192.168.1.1 实际上是四个字节:二进制的 11000000.10101000.00000001.00000001,或十六进制的 C0.A8.01.01。子网划分数学——判断两个地址是否在同一网络上——从根本上是对子网掩码的二进制 AND 操作,尽管我们为了方便用点分十进制书写。

在数字取证和恶意软件分析中,你不断地在这些表示法之间转换。反汇编器显示十六进制的操作码,CPU 执行原始二进制,寄存器值经常根据上下文被解释为十进制偏移或 ASCII 字符串。知道 0x41 既是数字 65 也是 ASCII 字符 'A' 这样的模式识别能力能显著加快手工分析。

数据单位:1000 还是 1024 的问题

这是真正让人出错的地方。存储制造商、文件系统和操作系统对 1 KB 是多少没有达成一致。

本文由人工智能协助撰写,经 Michal Pilch(CISSP)审核并发布,Korra Studio。

准备好更进一步了吗?

这是来自 Korra Studio 知识库的笔记之一——该平台将每个主题与一对一指导相结合。

免费开始arrow_forward