转换器

如何读懂二进制代码:二进制翻译完全指南

逐步学习如何读取和翻译二进制代码。理解位、字节、ASCII 编码、Unicode,并通过示例和编程代码实现二进制与文本的相互转换。

发布于 2026年3月20日
14 分钟阅读
密码学指南

如何读懂二进制代码:二进制翻译完全指南

二进制代码是每台计算机都在使用的基础语言。你发送的每封邮件、查看的每张图片、播放的每段视频,最终都以 0 和 1 的序列来表示。乍看之下,二进制可能像一堵难以理解的数字墙,但只要方法得当,任何人都能学会读懂它。

本指南将带你走完读取二进制代码的完整流程——从理解位和字节的基本概念,到在二进制与文本之间翻译完整的句子。你将学习 ASCII 和 Unicode 标准如何将二进制序列映射到我们日常使用的字符,看到逐步拆解每个步骤的实例演示,并找到可用于自动化转换过程的编程代码。无论你是学习计算机科学的学生、调试底层数据的开发者,还是只是对计算机如何表示信息感到好奇,本指南都能为你提供所需的一切。你也可以使用我们的免费二进制转换工具,在阅读本文的同时即时进行二进制与文本的相互转换。

什么是二进制代码?

二进制代码是一种只用两个符号——0 和 1——来表示信息的系统。它是一种二进制(以 2 为基数)数制,与人类日常生活中使用的十进制(以 10 为基数)系统相对。每个单独的 0 或 1 称为一个(bit),是"binary digit(二进制数字)"的缩写,也是计算中最小的数据单位。

以 2 为基数的数制有着深厚的历史渊源。德国数学家兼哲学家戈特弗里德·威廉·莱布尼茨在其 1703 年的论文《二进制算术的解释》中将现代二进制数制系统化。莱布尼茨证明了任何数字都可以只用 0 和 1 来表示,并从中发现了哲学意义——他将其与从虚无(0)到存在(1)的创造之道相联系。虽然莱布尼茨奠定了理论基础,但二进制找到其实际应用却又经历了两个多世纪。

计算机使用二进制,是因为其硬件由数十亿个晶体管构成——这些微小的电子开关恰好具有两种状态:开和关。"开"状态的晶体管代表 1,"关"状态代表 0。这种双态设计极其可靠,因为电路只需区分两个电压级别,而不是十个。构建能可靠区分十个不同电压级别的硬件(十进制计算机所需)要困难得多,也更容易出错。二进制还能与布尔逻辑(真/假)完美对应,而布尔逻辑正是所有数字计算的基础。

当你看到一串二进制代码,如 01001000 01101001,你看到的是一系列按特定模式排列的开/关信号,它们代表有意义的数据——在这个例子中,就是单词"Hi"。

位、字节及更大单位

在开始读取二进制代码之前,理解二进制数据的单位至关重要。

(bit)是单个二进制数字——0 或 1。单独的一位可以表示两个可能的值。这对于简单的真/假标志很有用,但不足以表示一个字母、数字或任何复杂的数据。

半字节(nibble)由 4 位组合而成。一个半字节可以表示 2^4 = 16 个不同的值(0 到 15),恰好对应一个十六进制数字(0-F)。在使用十六进制表示法时经常会提到半字节。

字节(byte)是 8 位的组合,是基本文本编码中表示单个字符的标准单位。一个字节可以表示 2^8 = 256 个不同的值(0 到 255)。当你看到按八位一组、以空格分隔的二进制代码——如 01001000 01100101 01101100 01101100 01101111——每组就是代表一个字符的一个字节。

随着数据量增长,我们使用由字节构建的更大单位:

单位大小大致规模
1 字节(Byte)8 位单个字符
1 千字节(KB)1,024 字节一篇短文本文档
1 兆字节(MB)1,024 KB一张高分辨率照片
1 吉字节(GB)1,024 MB约 250 首 MP3 歌曲
1 太字节(TB)1,024 GB约 500 小时的视频

了解这些单位有助于理解二进制运作的规模。一个网页可能涉及数百万个位协同工作,以渲染文本、图片和交互元素。

逐步读取二进制代码

读取二进制代码是一个有条不紊的过程。一旦理解了位置表示法,你就可以手动解码任何二进制序列。

位置表示法

二进制是一种位置数制,这意味着每个数字的值取决于它在数字中的位置。每个位置对应 2 的一次幂,从最右侧位置(2^0)开始,向左依次增大。

对于一个 8 位二进制数,从左到右各位置的值为:

位置76543210
2 的幂次2^72^62^52^42^32^22^12^0
1286432168421

要将二进制数转换为对应的十进制值,将每一位乘以其位置的值,然后把结果相加。

示例一:读取 01001000

我们来逐步解码二进制字节 01001000

01001000
位置值1286432168421
计算0 × 1281 × 640 × 320 × 161 × 80 × 40 × 20 × 1
结果064008000

求和: 0 + 64 + 0 + 0 + 8 + 0 + 0 + 0 = 72

十进制值 72 在 ASCII 编码中对应大写字母 'H'。因此,二进制序列 01001000 表示字母 H。

示例二:读取 01101001

现在来解码 01101001

01101001
位置值1286432168421
计算0 × 1281 × 641 × 320 × 161 × 80 × 40 × 21 × 1
结果0643208001

求和: 0 + 64 + 32 + 0 + 8 + 0 + 0 + 1 = 105

十进制值 105 在 ASCII 中对应小写字母 'i'。因此,01101001 表示字母 i。

读取完整单词

要读取一段二进制句子,将二进制字符串拆分为单个字节(8 位一组),将每个字节转换为其十进制值,然后查找对应的字符。

"Hi"的二进制表示:

01001000 01101001
  • 01001000 = 72 = 'H'
  • 01101001 = 105 = 'i'

结果:Hi

同样的过程可以扩展到任意长度的文本。在标准 ASCII 编码中,每个字节恰好对应一个字符,因此只需对每个 8 位分组重复执行转换即可。

ASCII 编码——二进制如何变为文本

理解二进制数字如何映射到特定字符,需要了解字符编码标准。其中最基础的就是 ASCII

ASCII 标准

美国信息交换标准代码(ASCII) 于 1963 年首次发布,成为早期计算机和互联网的主流字符编码。ASCII 采用 7 位编码方案,提供 2^7 = 128 个唯一字符代码(值为 0 到 127)。实际上,ASCII 字符存储在 8 位字节中,首位设为 0。

ASCII 字符分为两类:

  • 控制字符(0-31 和 127): 用于文本格式化和设备控制的不可打印字符。例如换行符(10)、制表符(9)、回车符(13)和空字符(0)。这些是控制文本显示或处理方式的不可见字符。
  • 可打印字符(32-126): 可见字符,包括字母、数字、标点符号和空格字符。这一范围涵盖了标准美式键盘上可以输入的所有内容。

ASCII 参考表:A-Z 与 a-z

以下是英文字母表中所有字母的完整 ASCII 表:

字符十进制二进制字符十进制二进制
A6501000001a9701100001
B6601000010b9801100010
C6701000011c9901100011
D6801000100d10001100100
E6901000101e10101100101
F7001000110f10201100110
G7101000111g10301100111
H7201001000h10401101000
I7301001001i10501101001
J7401001010j10601101010
K7501001011k10701101011
L7601001100l10801101100
M7701001101m10901101101
N7801001110n11001101110
O7901001111o11101101111
P8001010000p11201110000
Q8101010001q11301110001
R8201010010r11401110010
S8301010011s11501110011
T8401010100t11601110100
U8501010101u11701110101
V8601010110v11801110110
W8701010111w11901110111
X8801011000x12001111000
Y8901011001y12101111001
Z9001011010z12201111010

注意一个有用的规律:大写字母和小写字母的十进制值恰好相差 32。在二进制中,唯一的区别在于第 5 位(32 这个位置的位)。大写字母在该位置为 0,小写字母为 1。这种设计是有意为之的,使得大小写转换在硬件层面变得极为简单。

Unicode——超越 ASCII

ASCII 为计算世界服务了数十年,但它有一个致命的局限:它只支持 128 个字符,仅覆盖英文字母、阿拉伯数字、基本标点符号和少量控制代码。对于数十亿使用中文、阿拉伯文、印地文、韩文、日文以及数百种其他文字书写系统的人来说,这远远不够。

Unicode 联盟

Unicode 联盟成立于 1991 年,创建了一种旨在表示世界上每种书写系统的通用字符编码标准。Unicode 目前定义了 161 种文字中超过 149,000 个字符,包括历史文字、技术符号,以及——表情符号。

每个 Unicode 字符都被分配了一个唯一的码位,写作 U+ 后跟一个十六进制数字。例如,字母 A 是 U+0041,表示"水"的汉字是 U+6C34,笑脸表情符号是 U+1F600。

UTF-8 编码

UTF-8 是网络上使用最广泛的 Unicode 编码,为超过 98% 的网站提供支持。UTF-8 是一种变长编码,每个字符使用 1 到 4 个字节:

字节数码位范围说明
1 字节U+0000 至 U+007FASCII 字符(向后兼容)
2 字节U+0080 至 U+07FF拉丁文、希腊文、西里尔文、阿拉伯文、希伯来文
3 字节U+0800 至 U+FFFF中文、日文、韩文及大多数文字
4 字节U+10000 至 U+10FFFF表情符号、历史文字、罕见符号

UTF-8 的一个关键优势是与 ASCII 的向后兼容性。任何有效的 ASCII 文本也是有效的 UTF-8 文本,因为 UTF-8 对所有 128 个 ASCII 字符使用相同的单字节表示。这意味着你在前几节中学习的二进制读取方法,对于英文文本在 UTF-8 中同样完全适用。

在 UTF-8 下,表情符号需要 4 个字节。例如,红心表情符号(U+2764)在 UTF-8 中编码为三个字节 11100010 10011101 10100100。决定多字节序列结构的编码规则涉及首字节中的特定位模式,这些模式标志着后续还有多少字节——一种巧妙的设计,使解码器能够无歧义地按顺序处理文本。

常用词汇和短语的二进制表示

以下参考表展示了常用词汇和短语在二进制中的样子。每个字母用一个 8 位字节表示,字节之间的空格对应各个字符。

文本二进制表示
Hello01001000 01100101 01101100 01101100 01101111
World01010111 01101111 01110010 01101100 01100100
Love01001100 01101111 01110110 01100101
Yes01011001 01100101 01110011
No01001110 01101111
OK01001111 01001011
Hi01001000 01101001
Bye01000010 01111001 01100101
12300110001 00110010 00110011

注意最后一行的数字"123"被编码为其 ASCII 文本表示(49、50、51),而不是一百二十三这个数字的二进制。这是一个重要区别:数字 123 的二进制是 01111011,但文本字符 "1"、"2"、"3" 是三个独立的字节。

"I love you"的二进制表示

人们最常搜索的二进制短语之一就是"I love you"。以下是逐字符的详细分解:

01001001 00100000 01101100 01101111 01110110 01100101 00100000 01111001 01101111 01110101

逐字符解读:

  • 01001001 = 73 = 'I'
  • 00100000 = 32 = ' '(空格)
  • 01101100 = 108 = 'l'
  • 01101111 = 111 = 'o'
  • 01110110 = 118 = 'v'
  • 01100101 = 101 = 'e'
  • 00100000 = 32 = ' '(空格)
  • 01111001 = 121 = 'y'
  • 01101111 = 111 = 'o'
  • 01110101 = 117 = 'u'

这个短语使用了 10 个字节(80 位)——包括两个空格字符——用计算机能理解的语言表达了一句简单的人类情感。

文本转二进制

将文本转换为二进制是读取二进制的逆过程。不是从 0 和 1 出发找到字符,而是从字符出发产生其二进制表示。

分步流程

  1. 识别文本中的每个字符,包括空格和标点符号。
  2. 查找每个字符的 ASCII 十进制值(使用上面的参考表或任何 ASCII 字符表)。
  3. 将十进制值转换为二进制,方法是反复除以 2 并记录余数。
  4. 补齐至 8 位,如果二进制结果不足 8 位,在前面补零。
  5. 组合所有字节,以空格分隔每个字节。

示例:将"Cat"转换为二进制

第一步: 字符为 C、a、t。

第二步: 查找 ASCII 值:

  • C = 67
  • a = 97
  • t = 116

第三步和第四步: 将每个值转换为 8 位二进制:

C(67):

  • 67 / 2 = 33 余 1
  • 33 / 2 = 16 余 1
  • 16 / 2 = 8 余 0
  • 8 / 2 = 4 余 0
  • 4 / 2 = 2 余 0
  • 2 / 2 = 1 余 0
  • 1 / 2 = 0 余 1
  • 从下往上读余数:1000011,补齐至 8 位:01000011

a(97): 97 的二进制 = 01100001

t(116): 116 的二进制 = 01110100

第五步: 组合字节:

01000011 01100001 01110100

这就是"Cat"的二进制表示。你可以使用我们的二进制转换工具来验证手动转换的结果,它可以对任意文本输入即时完成这一过程。

编程中的二进制代码

大多数现代编程语言都提供了内置函数,用于在文本、十进制数字和二进制表示之间进行转换。以下是两种最流行的编程语言的实用示例。

Python

Python 通过 ord()chr()format() 函数使二进制转换变得简单直接。

将字符转换为二进制:

# 将单个字符转换为 8 位二进制
letter = 'A'
binary = format(ord(letter), '08b')
print(binary)  # 输出:01000001

# 将整个字符串转换为二进制
text = "Hello"
binary_text = ' '.join(format(ord(c), '08b') for c in text)
print(binary_text)
# 输出:01001000 01100101 01101100 01101100 01101111

将二进制转换回文本:

# 将单个二进制字节转换为字符
binary_str = '01000001'
character = chr(int(binary_str, 2))
print(character)  # 输出:A

# 将完整二进制字符串转换为文本
binary_message = '01001000 01100101 01101100 01101100 01101111'
text = ''.join(chr(int(b, 2)) for b in binary_message.split())
print(text)  # 输出:Hello

ord() 函数返回字符的 Unicode 码位(十进制值),format(..., '08b') 将该整数转换为 8 位二进制字符串,而 int(binary_str, 2) 将二进制字符串(以 2 为基数)解析回整数。

JavaScript

JavaScript 通过 charCodeAt()toString()parseInt()String.fromCharCode() 提供类似功能。

将字符转换为二进制:

// 将单个字符转换为 8 位二进制
const letter = 'A';
const binary = letter.charCodeAt(0).toString(2).padStart(8, '0');
console.log(binary); // 输出:01000001

// 将整个字符串转换为二进制
const text = "Hello";
const binaryText = [...text]
  .map(c => c.charCodeAt(0).toString(2).padStart(8, '0'))
  .join(' ');
console.log(binaryText);
// 输出:01001000 01100101 01101100 01101100 01101111

将二进制转换回文本:

// 将单个二进制字节转换为字符
const binaryStr = '01000001';
const character = String.fromCharCode(parseInt(binaryStr, 2));
console.log(character); // 输出:A

// 将完整二进制字符串转换为文本
const binaryMessage = '01001000 01100101 01101100 01101100 01101111';
const result = binaryMessage
  .split(' ')
  .map(b => String.fromCharCode(parseInt(b, 2)))
  .join('');
console.log(result); // 输出:Hello

charCodeAt(0) 方法返回位置 0 处字符的 UTF-16 代码单元,toString(2) 将数字转换为以 2 为基数的字符串,padStart(8, '0') 通过添加前导零确保结果始终为 8 位。

二进制与其他数制的比较

二进制只是计算中使用的几种数制之一。了解它与其他进制的比较,有助于你在不同表示形式之间灵活切换。

属性二进制八进制十进制十六进制
基数281016
使用的数字0-10-70-90-9、A-F
前缀(代码中)0b0o(无)0x
示例(13)11011513D
示例(255)11111111377255FF
常见用途硬件、底层编程文件权限(Unix)人类可读的数学运算内存地址、颜色

每种数制都有其优势。二进制直接映射到硬件。八进制提供了一种紧凑的二进制表达方式(每个八进制数字精确表示 3 位),常用于 Unix 文件权限。十进制是人类的思维方式。十六进制是编程中二进制最常用的简写,因为每个十六进制数字精确表示 4 位(一个半字节),使两者之间的转换十分便捷——8 位二进制 11111111 变为简洁的十六进制 FF

如需动手练习这些数制之间的转换,请试用我们的二进制转十进制转换器十六进制转二进制转换器

常见问题

二进制代码和机器码是一回事吗?

并不完全是。二进制代码是一种数制——一种用 0 和 1 表示值的方式。机器码是用二进制编写的一组指令,特定的 CPU 架构可以直接执行。所有机器码都是二进制,但并非所有二进制都是机器码。二进制可以表示文本、图像、音频、网络数据包或任何其他类型的数据。机器码特指处理器解释为指令(如"两数相加"或"将值存入内存")的二进制模式。

二进制能表示图像和声音吗?

可以。数字图像以像素网格的形式表示,每个像素的颜色以二进制数字存储。在标准 24 位彩色图像中,每个像素使用三个字节——一个用于红色通道,一个用于绿色,一个用于蓝色——值从 0 到 255。数字音频通过每秒数千次对声波进行采样(CD 音质通常为每秒 44,100 次),并将每个采样的振幅记录为二进制数字。每个采样的位数越多,录音就越精确。

8 位能表示多少个字符?

8 位(一个字节)可以表示 2^8 = 256 个不同字符——值从 0 到 255。这足以容纳整个 ASCII 字符集(128 个字符)再加上各种扩展 ASCII 编码使用的额外 128 个字符。原始 ASCII 标准只使用 7 位(128 个字符),第 8 位最初保留用于错误检查(奇偶校验)。后来,扩展范围(128-255)被用于添加字符,如带重音的字母和符号,但不同系统对这一范围使用不同的字符,导致了兼容性问题,最终由 Unicode 加以解决。

计算机为何使用二进制而非十进制?

计算机使用二进制,因为其硬件由晶体管构成,这些晶体管有两种可靠的状态:开(导电)和关(不导电)。区分两个电压级别远比区分十个级别可靠,而十进制计算机就需要区分十个级别。二进制还简化了电路设计,因为所有算术和逻辑运算都可以由操作二进制输入的简单逻辑门(与门、或门、非门)构建。其结果是比任何多态替代方案都更快、更便宜、更小、更节能的硬件。

8 位能表示的最大数字是多少?

对于无符号(非负)数,8 位可以表示 0 到 255 的值。最大的无符号 8 位数是二进制的 11111111,等于 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255。对于使用二进制补码(计算机表示负数的标准方法)的有符号数,8 位表示从 -128 到 127 的值。无符号 n 位数的通用公式是:最大值等于 2^n - 1。

计算机如何用二进制处理负数?

大多数现代计算机使用一种称为二进制补码的系统来表示负数。在二进制补码中,最左边的位(称为符号位)表示正负:0 为正,1 为负。要求一个数的二进制补码,需将所有位取反(0 变 1,1 变 0),然后加 1。例如,用 8 位表示 -5:从 5 = 00000101 开始,取反得 11111010,加 1 得 11111011。二进制补码的优雅之处在于,正数和负数的加减运算方式完全相同,从而简化了 CPU 设计。

结语

读懂二进制代码是一项基础技能,能让计算机存储和处理信息的方式不再神秘。其核心过程很简单:每组 8 位代表一个数字,该数字通过 ASCII 和 Unicode 等编码标准映射到字符。借助位置表示法——将每一位乘以其对应的 2 的幂次值并求和——你可以徒手解码任何二进制信息。

需要记住的关键概念是:位是最小的数据单位;字节将 8 位组合在一起以表示单个字符;ASCII 将前 128 个值映射到英文字符和符号;UTF-8 将其扩展至涵盖世界上每种书写系统和表情符号。无论是手动转换,还是使用 Python 的 ord()chr()、JavaScript 的 charCodeAt()fromCharCode() 等编程函数,底层逻辑都是相同的。

准备好实践了吗?使用我们的免费二进制转换工具即时将任意文本转换为二进制,再转换回来,亲身体验本指南中的原理。

关于本文

本文是我们综合 转换器 教程系列的一部分。继续了解古典密码学,并探索我们的交互式密码工具。

更多 转换器 教程

试用 转换器 工具

通过我们的交互式转换器工具,将所学知识付诸实践。

试用 转换器 工具