十六进制转二进制:完整指南(含对照表与示例)
十六进制转二进制:完整指南(含对照表与示例)
十六进制到二进制的转换是计算领域最基础的技能之一。无论是读取内存转储、检查网络数据包、用颜色代码为网页配色,还是调试底层固件,在十六进制与二进制之间灵活切换的能力都不可或缺。好消息是:这也是最容易掌握的转换之一,因为这两种数制之间存在一种简洁的数学关系。
本指南涵盖十六进制转二进制的所有必备知识。读完之后,你将能够手工完成任意十六进制值到二进制的转换,理解这种转换背后的原理,并用四种编程语言编写实现转换的代码。欢迎使用我们的免费十六进制转二进制工具,边阅读边对下面的示例进行实操验证。
什么是十六进制?
十六进制——常简称为 hex——是一种十六进制(base-16)数制。它使用十六个不同的符号来表示数值:
0-9 表示零到九
A-F(或 a-f)表示十到十五
十六进制数码十进制值00112233445566778899A10B11C12D13E14F15
计算机为什么使用十六进制
计算机以二进制工作,但二进制字符串对人类来说既长又容易出错。十进制虽然对人类友好,却与二进制对齐不整。十六进制兼具两者之长:每个十六进制数码恰好对应 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 个二进制位。这不是近似或捷径——这是精确的数学对应关系。完整映射如下:
十六进制二进制十六进制二进制0000081000100019100120010A101030011B101140100C110050101D110160110E111070111F1111
第一步:写下十六进制数
去掉任何前缀或记号。常见前缀包括:
0x(C、Java、Python、JavaScript):0xFF 变为 FF
#(CSS 颜色代码):#3A7BD5 变为 3A7BD5
$(6502 汇编):$FF 变为 FF
h 后缀(Intel 汇编):FFh 变为 FF
第二步:将每个十六进制数码替换为 4 位二进制
从左到右,使用上方对照表替换每个十六进制数码。始终使用完整的 4 位表示,包括前导零。
第三步:合并所有分组
拼接各 4 位分组,即得到完整的二进制表示。为了便于阅读,可选择在各半字节分组之间添加空格。
十六进制转二进制对照表
以下是单个十六进制数码到二进制转换的权威参考表,同时包含十进制等值:
十六进制十进制二进制000000110001220010330011440100550101660110770111881000991001A101010B111011C121100D131101E141110F151111
多位数值扩展示例
十六进制十进制二进制0000000 00000F150000 111110160001 00007F1270111 1111801281000 0000FF2551111 11111002560001 0000 0000FFFF655351111 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
带 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
#include
// 打印二进制表示
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;
}
每位开发者都应熟记的常用十六进制值
边界值
十六进制二进制十进制含义0x000000 00000空字节,字节最小值0x7F0111 1111127有符号 8 位整数最大值0x801000 0000128有符号 8 位最小值(二进制补码)0xFF1111 1111255无符号 8 位最大值(1 字节)0xFFFF1111 1111 1111 111165,535无符号 16 位最大值0xFFFFFFFF1111 1111 1111 1111 1111 1111 1111 11114,294,967,295无符号 32 位最大值
网页颜色值
十六进制二进制颜色#0000000000 0000 0000 0000 0000 0000黑色#FFFFFF1111 1111 1111 1111 1111 1111白色#FF00001111 1111 0000 0000 0000 0000红色#00FF000000 0000 1111 1111 0000 0000绿色#0000FF0000 0000 0000 0000 1111 1111蓝色#FF57331111 1111 0101 0111 0011 0011橙色#3A7BD50011 1010 0111 1011 1101 0101蓝色
ASCII 码的十六进制表示
十六进制二进制字符0x200010 0000空格0x300011 0000'0'0x410100 0001'A'0x610110 0001'a'0x7E0111 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 位分组可视化展示。