十六进制转二进制:完整指南(含对照表与示例)
通过完整的 0-F 转换对照表、实战示例、编程代码和常用十六进制值,学习如何将十六进制转换为二进制——每位开发者都应掌握的基础技能。
十六进制转二进制:完整指南(含对照表与示例)
十六进制到二进制的转换是计算领域最基础的技能之一。无论是读取内存转储、检查网络数据包、用颜色代码为网页配色,还是调试底层固件,在十六进制与二进制之间灵活切换的能力都不可或缺。好消息是:这也是最容易掌握的转换之一,因为这两种数制之间存在一种简洁的数学关系。
本指南涵盖十六进制转二进制的所有必备知识。读完之后,你将能够手工完成任意十六进制值到二进制的转换,理解这种转换背后的原理,并用四种编程语言编写实现转换的代码。欢迎使用我们的免费十六进制转二进制工具,边阅读边对下面的示例进行实操验证。
什么是十六进制?
十六进制——常简称为 hex——是一种十六进制(base-16)数制。它使用十六个不同的符号来表示数值:
- 0-9 表示零到九
- A-F(或 a-f)表示十到十五
| 十六进制数码 | 十进制值 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| A | 10 |
| B | 11 |
| C | 12 |
| D | 13 |
| E | 14 |
| F | 15 |
计算机为什么使用十六进制
计算机以二进制工作,但二进制字符串对人类来说既长又容易出错。十进制虽然对人类友好,却与二进制对齐不整。十六进制兼具两者之长:每个十六进制数码恰好对应 4 个二进制位,是二进制数据的一种紧凑且人类可读的简写形式。
以二进制字节值 11010110 为例。它的十进制是 214,验证时需要心算。而它的十六进制只是 D6——两个字符,对照一张小小的查找表即可逐位核验。
十六进制的常见用途
- 网页颜色代码:
#FF5733、#3A7BD5、#000000 - 内存地址:
0x7FFF5FBFF8AC - MAC 地址:
00:1A:2B:3C:4D:5E - Unicode 码点:
U+0041(字母 A) - 加密哈希值:SHA-256 生成 64 位十六进制数字
- 汇编语言:机器码操作数以十六进制书写
- IPv6 地址:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
什么是二进制?
二进制是一种二进制(base-2)数制,只使用两个符号:0 和 1。它是所有数字计算机的基础语言,因为电子电路最可靠的设计方式就是基于两态(开/关)逻辑。
位、半字节与字节
- 位(bit) 是单个二进制数字(0 或 1)。
- 半字节(nibble) 是 4 位。一个半字节可以表示 16 个值(0-15),恰好对应一个十六进制数码。
- 字节(byte) 是 8 位(2 个半字节)。一个字节可以表示 256 个值(0-255),恰好对应两个十六进制数码(00-FF)。
- 字(word) 随体系结构而异,通常为 16、32 或 64 位。
半字节是十六进制转二进制转换的关键单元。由于一个十六进制数码等于一个半字节,两种数制之间的转换就是简单的逐位替换。
如何将十六进制转换为二进制
核心规则很简单:将每个十六进制数码替换为其对应的 4 位二进制值。
4 位映射规则
由于 16 = 2^4,每个十六进制数码恰好映射到 4 个二进制位。这不是近似或捷径——这是精确的数学对应关系。完整映射如下:
| 十六进制 | 二进制 | 十六进制 | 二进制 |
|---|---|---|---|
| 0 | 0000 | 8 | 1000 |
| 1 | 0001 | 9 | 1001 |
| 2 | 0010 | A | 1010 |
| 3 | 0011 | B | 1011 |
| 4 | 0100 | C | 1100 |
| 5 | 0101 | D | 1101 |
| 6 | 0110 | E | 1110 |
| 7 | 0111 | F | 1111 |
第一步:写下十六进制数
去掉任何前缀或记号。常见前缀包括:
0x(C、Java、Python、JavaScript):0xFF变为FF#(CSS 颜色代码):#3A7BD5变为3A7BD5$(6502 汇编):$FF变为FFh后缀(Intel 汇编):FFh变为FF
第二步:将每个十六进制数码替换为 4 位二进制
从左到右,使用上方对照表替换每个十六进制数码。始终使用完整的 4 位表示,包括前导零。
第三步:合并所有分组
拼接各 4 位分组,即得到完整的二进制表示。为了便于阅读,可选择在各半字节分组之间添加空格。
十六进制转二进制对照表
以下是单个十六进制数码到二进制转换的权威参考表,同时包含十进制等值:
| 十六进制 | 十进制 | 二进制 |
|---|---|---|
| 0 | 0 | 0000 |
| 1 | 1 | 0001 |
| 2 | 2 | 0010 |
| 3 | 3 | 0011 |
| 4 | 4 | 0100 |
| 5 | 5 | 0101 |
| 6 | 6 | 0110 |
| 7 | 7 | 0111 |
| 8 | 8 | 1000 |
| 9 | 9 | 1001 |
| A | 10 | 1010 |
| B | 11 | 1011 |
| C | 12 | 1100 |
| D | 13 | 1101 |
| E | 14 | 1110 |
| F | 15 | 1111 |
多位数值扩展示例
| 十六进制 | 十进制 | 二进制 |
|---|---|---|
| 00 | 0 | 0000 0000 |
| 0F | 15 | 0000 1111 |
| 10 | 16 | 0001 0000 |
| 7F | 127 | 0111 1111 |
| 80 | 128 | 1000 0000 |
| FF | 255 | 1111 1111 |
| 100 | 256 | 0001 0000 0000 |
| FFFF | 65535 | 1111 1111 1111 1111 |
对于任意十六进制值,都可以使用我们的十六进制转二进制工具即时验证转换结果。
实战示例
简单:A 转二进制
十六进制输入: A
- A = 1010
结果: 1010(十进制 10)
这是最基础的转换:单个十六进制数码转换为单个半字节。
中等:2F 转二进制
十六进制输入: 2F
- 2 = 0010
- F = 1111
结果: 0010 1111(十进制 47)
每位数码独立转换,再将各半字节拼接在一起。
复杂:DEADBEEF 转二进制
十六进制输入: DEADBEEF
这是一个著名的「hexspeak」值,在软件调试中用作魔术数字。
- D = 1101
- E = 1110
- A = 1010
- D = 1101
- B = 1011
- E = 1110
- E = 1110
- F = 1111
结果: 1101 1110 1010 1101 1011 1110 1110 1111
这是 32 位(4 字节),恰好是 32 位整数的完整宽度。DEADBEEF 的十进制值为 3,735,928,559。
颜色代码:#FF5733 转二进制
十六进制输入: FF5733(一种暖橙红色)
- F = 1111
- F = 1111
- 5 = 0101
- 7 = 0111
- 3 = 0011
- 3 = 0011
结果: 1111 1111 0101 0111 0011 0011
这 24 位分解为三个 RGB 字节:
- 红: 11111111 = 255
- 绿: 01010111 = 87
- 蓝: 00110011 = 51
你也可以使用我们的十六进制转 RGB 工具探索十六进制颜色值。
带 0x 前缀:0x1A3F 转二进制
十六进制输入: 0x1A3F(先去掉 0x 前缀)
- 1 = 0001
- A = 1010
- 3 = 0011
- F = 1111
结果: 0001 1010 0011 1111(十进制 6,719)
0x 前缀只是 C、Java、Python 和 JavaScript 中用于标识十六进制数的记号惯例,不影响转换过程。
二进制转回十六进制
反向转换同样简单:
- 从右到左分成 4 位半字节。 从最低有效位(最右侧)开始,每四位为一组。
- 如有需要,用前导零补齐。 若最左侧分组不足 4 位,在左侧补零。
- 将每个 4 位分组替换为对应的十六进制数码。
实战示例
二进制输入: 110101101
第一步:从右分组:1 1010 1101
第二步:补齐最左侧分组:0001 1010 1101
第三步:转换各分组:
- 0001 = 1
- 1010 = A
- 1101 = D
结果: 1AD(十进制 429)
各编程语言中的十六进制转二进制
Python
Python 的 int() 函数可解析十六进制字符串,bin() 则将其转换为二进制:
# 基本转换
hex_str = "FF"
binary_str = bin(int(hex_str, 16)) # '0b11111111'
# 整洁输出(无前缀,零填充)
clean = format(int(hex_str, 16), '08b') # '11111111'
# 颜色代码转换
color = "3A7BD5"
bits = format(int(color, 16), '024b') # '001110100111101111010101'
# 按 4 位分组
grouped = ' '.join(bits[i:i+4] for i in range(0, len(bits), 4))
# '0011 1010 0111 1011 1101 0101'
JavaScript
JavaScript 使用 parseInt() 解析十六进制,使用 .toString(2) 输出二进制:
// 基本转换
const hex = "FF";
const bin = parseInt(hex, 16).toString(2); // '11111111'
// 零填充到字节边界
const padded = bin.padStart(Math.ceil(bin.length / 8) * 8, '0');
// '11111111'
// 对大于 2^53 的值,使用 BigInt
const bigHex = "DEADBEEF";
const bigBin = BigInt("0x" + bigHex).toString(2);
// '11011110101011011011111011101111'
Java
Java 提供 Integer.parseInt() 和 Integer.toBinaryString():
// 基本转换
String hex = "FF";
int decimal = Integer.parseInt(hex, 16); // 255
String binary = Integer.toBinaryString(decimal); // "11111111"
// 零填充
String padded = String.format("%8s", binary).replace(' ', '0');
// "11111111"
// 较大值
long bigDecimal = Long.parseLong("DEADBEEF", 16);
String bigBinary = Long.toBinaryString(bigDecimal);
// "11011110101011011011111011101111"
C/C++
C 和 C++ 使用 strtol() 或直接进行位运算:
#include <stdio.h>
#include <stdlib.h>
// 打印二进制表示
void printBinary(unsigned long n, int bits) {
for (int i = bits - 1; i >= 0; i--) {
printf("%d", (n >> i) & 1);
if (i % 4 == 0 && i > 0) printf(" ");
}
printf("\n");
}
int main() {
unsigned long value = strtoul("FF", NULL, 16);
printBinary(value, 8); // 1111 1111
unsigned long color = strtoul("3A7BD5", NULL, 16);
printBinary(color, 24); // 0011 1010 0111 1011 1101 0101
return 0;
}
每位开发者都应熟记的常用十六进制值
边界值
| 十六进制 | 二进制 | 十进制 | 含义 |
|---|---|---|---|
| 0x00 | 0000 0000 | 0 | 空字节,字节最小值 |
| 0x7F | 0111 1111 | 127 | 有符号 8 位整数最大值 |
| 0x80 | 1000 0000 | 128 | 有符号 8 位最小值(二进制补码) |
| 0xFF | 1111 1111 | 255 | 无符号 8 位最大值(1 字节) |
| 0xFFFF | 1111 1111 1111 1111 | 65,535 | 无符号 16 位最大值 |
| 0xFFFFFFFF | 1111 1111 1111 1111 1111 1111 1111 1111 | 4,294,967,295 | 无符号 32 位最大值 |
网页颜色值
| 十六进制 | 二进制 | 颜色 |
|---|---|---|
| #000000 | 0000 0000 0000 0000 0000 0000 | 黑色 |
| #FFFFFF | 1111 1111 1111 1111 1111 1111 | 白色 |
| #FF0000 | 1111 1111 0000 0000 0000 0000 | 红色 |
| #00FF00 | 0000 0000 1111 1111 0000 0000 | 绿色 |
| #0000FF | 0000 0000 0000 0000 1111 1111 | 蓝色 |
| #FF5733 | 1111 1111 0101 0111 0011 0011 | 橙色 |
| #3A7BD5 | 0011 1010 0111 1011 1101 0101 | 蓝色 |
ASCII 码的十六进制表示
| 十六进制 | 二进制 | 字符 |
|---|---|---|
| 0x20 | 0010 0000 | 空格 |
| 0x30 | 0011 0000 | '0' |
| 0x41 | 0100 0001 | 'A' |
| 0x61 | 0110 0001 | 'a' |
| 0x7E | 0111 1110 | '~' |
熟记这些值,能显著加快调试、内存检查和底层编程的效率。
常见问题
如何将十六进制转换为二进制?
将每个十六进制数码替换为其对应的 4 位二进制值。映射关系为:0=0000、1=0001、2=0010、……、9=1001、A=1010、B=1011、C=1100、D=1101、E=1110、F=1111。例如,十六进制 2F 变为 0010 1111。这是因为 16 = 2^4,每个十六进制数码恰好代表 4 个二进制位。
0xFF 的二进制是什么?
0xFF 的二进制是 11111111(八个 1)。F 对应二进制 1111,所以 FF 变为 1111 1111。它的十进制等于 255,代表单个无符号字节的最大值。
一个十六进制数码对应几个二进制数字?
恰好 4 个二进制数字(位)。这是因为十六进制(base-16)中 16 = 2^4。一个十六进制数码可以表示 0-15 的值,恰好是 4 位(0000 到 1111)的范围。
DEADBEEF 的二进制是什么?
十六进制 DEADBEEF 转换为二进制是 11011110 10101101 10111110 11101111。它的十进制等于 3,735,928,559。这是一个著名的「hexspeak」魔术数字,常用于调试时填充未初始化的内存。
如何将二进制转回十六进制?
从右到左将二进制数字每四位分为一组,如有需要在最左侧分组补前导零。然后将每个 4 位分组替换为对应的十六进制数码。例如,二进制 10110010 分组为 1011 0010,转换后对应十六进制 B2。
为什么使用十六进制而不是二进制?
十六进制被广泛使用,是因为它比二进制紧凑得多、可读性更强,同时与二进制保持直接的数学对应关系。字节值 11010110 对应的十六进制只是 D6——两个字符代替八个,且无需任何运算即可相互转换。
十六进制与二进制有什么区别?
十六进制(base-16)使用数字 0-9 和字母 A-F,而二进制(base-2)只使用 0 和 1。十六进制是二进制数据的人类友好表示:每个十六进制数码恰好编码 4 个二进制位。计算机内部以二进制运行,但开发者使用十六进制作为便捷的记号形式。
不用计算器也能进行十六进制到二进制的转换吗?
可以。一旦记住 16 个映射关系(0=0000 到 F=1111),你就能在几秒内手工完成任意十六进制数的二进制转换。这种转换对每位数码来说都是简单的一对一替换,无需进位、借位或任何算术运算。
十六进制颜色代码与二进制有什么关系?
像 #FF5733 这样的十六进制颜色代码,本质上是一个 24 位二进制值,分为三个 8 位通道:红色(FF = 11111111 = 255)、绿色(57 = 01010111 = 87)和蓝色(33 = 00110011 = 51)。十六进制记号只是定义颜色的 24 个二进制位的一种紧凑表示方式。
一个字节内最大的十六进制值是什么?
FF(十进制 255,二进制 11111111)。一个字节是 8 位,8 位的最大值为 11111111,对应十六进制中 F(1111)接 F(1111)。这就是为什么字节值的十六进制范围始终是 00 到 FF。
总结
十六进制转二进制是一项建立在一条简单规则之上的基础技能:每个十六进制数码恰好等于 4 个二进制位。无论是转换单个数码 A(1010)、一个字节 FF(11111111),还是复杂的值 DEADBEEF,过程始终是同样的机械替换。
本指南的核心要点:
- 16 = 2^4,因此一个十六进制数码 = 一个 4 位半字节
- 记住 0-F 对照表,即可即时完成任意十六进制数的二进制转换
- 两个十六进制数码 = 一个字节(8 位),使十六进制成为面向字节数据的自然记号形式
- 各编程语言均提供内置函数:Python 的
bin(int(x, 16))、JavaScript 的parseInt(x, 16).toString(2)、Java 的Integer.toBinaryString(Integer.parseInt(x, 16)) - 反向转换(二进制转十六进制)通过从右侧将位分组为半字节来实现
准备好练习了吗?使用我们的免费十六进制转二进制工具,即时将任意十六进制值转换为二进制,并附有逐步的逐半字节分解和 4 位分组可视化展示。