什么是字节?

2025 年 6 月 8 日 | 阅读 16 分钟

字节是数据测量单位,主要由八个比特组成。字节是一系列二进制数字,包含“0”或“1”。字节用大写字母“B”表示,而比特用小写字母“b”表示。比特和字节的符号在 IEC80000-13 和 IEEE 1541 中指定。这个术语由 Werner Buchholz 于 1956 年引入。

字节是计算机系统中存储容量的基本单位。计算机也使用它来表示字符,例如数字、字母或符号。单个字节可以表示 28 或 256 种不同的值。这些值从 00000000 二进制到 11111111 二进制。

半字节(nibble)是在字节之前的 数据单位。而千字节(kilobyte)在其之后。

字节用于测量内存大小和数据传输速度。以下是内存大小中字节的示例:

以下是数据传输速度的示例:

  • 千字节/秒,
  • 兆字节/秒 等。

一些编程语言也使用字节作为数据类型。例如,CC++Java 使用字节作为数据类型。

其他数据单位到字节的转换

下表显示了其他数据单位中字节的值:

序号其他单位字节值
1.1 比特 (b) 等于0.125 字节
2.1 千比特 (kbit) 等于125 字节
3.1 Kibibit 等于128 字节
4.1 兆比特 (Mbit) 等于125000 字节
5.1 Mebibit 等于131072 字节
6.1 吉比特 (Gbit) 等于1.25e + 8 字节
7.1 Gibibit 等于1.342e+8 字节
8.1 太比特 (Tbit) 等于1.25e+11 字节
9.1 Tebibit 等于1.374e+11 字节
10.1 Pb (Petabit) 等于1.25e+14 字节
11.1 Pebibit 等于1.407e+14 字节
12.1 Eb (Exabit) 等于1.25e+17 字节
13.1 Exbibit 等于144115188075855872 字节
14.1 Yobibits 等于1.511e+23 字节
15.1 半字节 等于0.5 字节
16.1 字节 等于1 字节
17.1 千字节 (KB) 等于1000 字节
18.1 Kibibyte 等于1024 字节
19.1 兆字节 (MB) 等于1e+6 字节
20.1 Mebibytes 等于1.049e+6 字节
21.1 吉字节 (GB) 等于1e+9 字节
22.1 Gibibytes 等于1.074e+9 字节
23.1 太字节 (TB) 等于1e+12 字节
24.1 Tebibytes 等于1.1e+12 字节
25.1 PB (Petabytes) 等于1e+15 字节
26.1 Pebibytes 等于1.126e+15 字节
27.1 EB (Exabytes) 等于1.0e+18 字节 字节
28.1 Exbibytes 等于1152921504606846976 字节
29.1 Zettabytes 等于1.0e+21 字节
30.1 Yottabytes 等于 1.0e+24 字节
31.1 Yobibytes 等于1.2089258196146e+24 字节

1 字节转换为一些常见的数据存储单位

下表显示了 1 字节中其他数据单位的值:

序号1 字节数据单位
1.1 字节 等于8 比特 (b)
2.1 字节 等于2 半字节 (nibble)
3.1 字节 等于1 字节 (B)
4.1 字节 等于125 千比特 (Kbit)
5.1 字节 等于0.0078125 kibibits (kibit)
6.1 字节 等于8e-6 兆比特 (Mbit)
7.1 字节 等于7.6294e-6 mebibits (Mibit)
8.1 字节 等于8e-9 吉比特 (Gbit)
9.1 字节 等于7.4506e-9 Gibibits (Gibit)
10.1 字节 等于8e-12 太比特 (Tbit)
11.1 字节 等于7.276e-12 Tebibits (Tibit)
12.1 字节 等于8e-15 Pb (Petabits) (Pbit)
13.1 字节 等于7.1054e-15 Pebibits (Pibit)
14.1 字节 等于0.001 千字节 (Kb)
15.1 字节 等于0.000976563 kibibytes
16.1 字节 等于1e-6 兆字节 (Mb)
17.1 字节 等于9.5367e-7 Mebibytes
18.1 字节 等于1e-9 吉字节 (Gb)
19.1 字节 等于9.3132e-10 Gibibytes
20.1 字节 等于1e-12 太字节 (Tb)
21.1 字节 等于9.0949e-13 Tebibytes
22.1 字节 等于1e-15 PB (Petabytes) (Pb)
23.1 字节 等于8.8818e-16 Pebibytes

字节的历史和演变

字节,通常被认为是数字信息的基本单位,其历史根深蒂固。人们普遍认为,一位名叫 Werner Buchholz 的计算机专家在 1956 年参与 IBM Stretch 项目时,是第一个使用“byte”这个词的人。最初,它指的是一组用于加密单个信息字符的比特,但字节的大小经常因系统而异。

由于竞争,形成了鼓励标准化的政策,后来该标准被称为 8 比特字节。这变得流行起来,因为在表示数据时,需要各种各样的字符,从而产生了这种标准的需求。

字节历史上的关键里程碑

  • 1956 年:Bucholz 在 IBM Stretch 计算机的开发阶段首次使用了 Byte 这个词,后来修改了定义,使其包含灵活的比特系统。
  • 1964 年:IBM 推出了 8 比特字节集合,这极大地改变了软件。
  • 1970 年代-1980 年代:到 80 年代,随着个人计算机的出现,8 比特标准在数据存储和内存系统中越来越受欢迎。
  • 1990 年代至今:技术的进步使得对高效数据存储和传输的需求越来越大,这需要引入更大的单位,如千字节(KB)、兆字节(MB)、千兆字节(GB)和太字节(TB)。根据这些新单位,每个派生单位的基础仍然是字节。

如今,从文本文件到视听文件,所有内容都以字节进行处理。不断发展的计算技术是快速存储、数据处理和通信方式变化(与“字节”单位的关系)的唯一原因。

字节在计算中的工作原理?

计算机数据的基本单位是字节,由 8 个比特组成,它被定义为数字信息的块。比特(源自“二进制数字”一词)通过提供单个值(0 或 1)来极好地展示其名称。这 8 个比特在一起可以创建 256 种不同的组合(2⁸),形成了所有数字表示所必需的多功能性。

在计算机系统中,字节的多功能性使其可以用于多种不同的数据形式:

  • 文本字符:著名的编码协议,如 ASCII(美国信息交换标准代码)和 Unicode,证明了字节实际上可以用于字符存储。例如,在 ASCII 中,表示字符“A”的字节是 01000001。
  • 数值:字节用于编码整数、浮点值和任何其他数值数据类型。根据数字的大小,其中一些可能跨越多个字节,但每个字节都有助于表示最终值。
  • 机器指令:机器指令。使用汇编语言或低级编程的程序员通常使用字节对机器指令进行编码。这些指令包含要由CPU 执行的操作以及如何执行。

二进制表示示例

让我们以 01000001 为例

  • 在十进制中表示数字 65。
  • ASCII 格式:在 ASCII 格式中,它被编码为字符 A。
  • 在给定的指令集中,它可能用于表示某个命令或操作。

简单来说,大多数计算机体系结构将字节视为可寻址内存中的最后一个单位。换句话说,它表示处理器从内存中读取和/或写入是按一个或多个字节进行的。实际上,每个数字设备都使用字节来存储、处理和传输文件。

编程和数据结构中的字节

字节是编程中的基本组成部分之一。信息的存储、操作和传输在很大程度上依赖于它们。字节经常在网络应用程序以及固件和软件级别的文件处理和内存管理中遇到。

内存分配包括变量和数据结构,如数组和结构,它们由字节组成。每种数据类型在内存中占用特定的字节数。例如,在 C 和 C++ 中,char 将分配 1 字节,而 int(取决于系统体系结构)将占用大约 4 字节。了解数据类型的字节大小对于内存管理和优化非常重要。

在文件处理中,对二进制文件执行读取和写入等操作需要处理字节。二进制文件的例子包括图像、音频或可执行程序。与由可读字符组成的文件不同,二进制文件由原始字节序列组成。为了保持这些文件的完整性和结构,数据必须按字节进行操作。

在网络中,字节定义了在 TCP 或 IP 等协议上传输的数据包的结构。每个数据包都包含一个头部和一个有效载荷,所有这些都组织成字节序列。在设备之间通信以成功执行时,正确解析和解释这些字节是必要的。

常见的与字节相关的数据类型

语言数据类型大小(字节)
C/C++char1
Javabyte1
Python字节可变长度

示例:在 Python 中读取文件的字节

在 Python 中,使用内置函数 open() 可以轻松读取二进制文件。它可以与 'rb' 一起使用,这使您可以以二进制模式读取文件。

此特定代码会查看文件的前四个字节,并将它们提取为字节对象,这是处理二进制文件类型、实现专有文件解释器或执行低级数据分析的常见做法。

因此,字节的操作对于理解数据结构、编写高效的低级代码以及在域中处理多个级别的数据至关重要。

理解编程中的字节

参考计算机体系结构,字节是内存中可作为可寻址单元唯一标识的最小段。字节以二进制格式表示数据,直接对应于 8 个比特的字符串。

这一系列比特可以表示任何内容,从简单的数值(如 0 到 1)到复杂的多媒体内容(如图片和电影)。在计算机科学中,特别是在 Python、C 和 Java 等编程语言中,直接访问字节可以方便地进行数据存储、传输甚至处理。

当以二进制模式(例如 Python 中的 'rb')打开文件时,数据将作为字节而不是文本字符串读取。这对于非文本文件(如图像、音频文件、可执行文件,甚至是 PNG、MP3 和 MP4 等结构化二进制格式)至关重要。将这些文件作为文本读取会损坏数据,因为并非所有二进制值都是有效或有意义的字符。

字节操作的应用场景

1. 解析自定义文件格式

某些应用程序需要解释专有或非标准的文件格式。例如,游戏引擎通常使用自定义格式来存储纹理、模型或关卡数据。要解析这些格式,开发人员必须逐字节读取文件,解释头部,并相应地解码数据部分。

上面的示例可能会显示一个“魔术数字”——这是许多二进制文件格式开头常见的特征,用于标识它们。

2. 使用网络协议

网络通信协议通常定义数据包头部和有效载荷的特定字节布局。例如,HTTP、TCP/IP 或自定义协议需要通过操作字节来解析或构建消息。在 Python 中,socket 模块广泛使用字节序列在网络上传输和接收数据。

处理多媒体文件

JPEG、MP3 和 MP4 等多媒体文件使用高度结构化的字节模式。读取前几个字节(也称为文件签名或魔术数字)有助于识别文件类型或提取元数据。例如,MP3 文件可能以字节 b'\xFF\xFB' 开头,表示帧的开始。

3. 数据压缩和加密

压缩算法(例如 ZIP、PNG)和加密例程(例如 AES、RSA)在原始字节上运行。它们在不考虑人类可读字符的情况下对数据进行编码或解码。因此,深入理解字节操作对于实现或调试此类系统至关重要。

使用字节的关键概念和函数

字节字符串与 Unicode 字符串

在 Python 3 中,字节字符串(bytes)和 Unicode 字符串(str)之间有明确的区别。字节字符串前缀为 b(例如,b'hello'),表示原始二进制数据,而 Unicode 字符串用于人类可读的文本。

不正确地混合这两种类型会导致错误

用于转换:

Python 的 struct 模块

struct 模块允许将字节解释为打包的二进制数据,这在处理 C 风格的结构时特别有用。

在此示例中,

常见陷阱

  • 以文本模式读取文件:请勿使用 'r' 模式读取二进制文件,这会破坏或错误解释某些字节值。在 Windows 上,由于换行符 (\r\n) 替换了回车符,文件会损坏。
  • 忽略缓冲区大小:一次读取一个字节的大型二进制文件并缺乏缓冲区会破坏效率。相反,请使用 file.read(1024) 风格的分块读取。
  • 硬编码偏移量而不考虑上下文:不应随意假定固定偏移量。即使是一些结构化格式也会使用可选字段或可变长度条目。

面向字节的文件格式及其重要性

数据的组织、存储和检索依赖于字节,当今许多文件格式也是如此,例如图像(JPEG、PNG)、文档(PDF、DOCX)、音频(MP3、WAV)甚至视频(MP4、AVI)。每个文件都是一个字节序列,以其格式规定的特定结构存储。

以 PNG 文件为例,其前几个字节包含一个签名,允许其软件或操作系统识别文件类型。后面的所有内容都是描述元数据、颜色调色板、像素数据和其他数据的块——所有这些都按字节组织。

这有助于更好地组织和构建字节:

  • 高效解析:程序可以在不打开整个文件的情况下访问文件的特定段。
  • 数据压缩:压缩技术在字节级别进行操作,以减小文件占用的空间量。
  • 错误检测和纠正:CRC(循环冗余校验)等技术应用有规律的字节来识别和有时纠正信息中的错误。

内存中的字节对齐和填充

在分配内存块的情况下,尤其是在 C 或 C++ 等低级编程语言中,包含这些模式的数据需要字节对齐。这是确保信息以减少其在类型中占用的物理空间的方式。计算机处理器也有要求。

对齐的重要性

  • 性能:从内存行中获取字节序列比在没有方向的情况下获取数据块更有效。
  • 兼容性:在分部门机器中未能正确排列数据非常危险。
  • 内存效率:添加未使用的位作为填充物有助于使段有序。

示例

考虑 C 中的以下结构

如果编译器在声明周围用三个填充字节环绕字符,则结构的总大小将超过 5 字节,而将其对齐到 4 字节边界,则为 8 字节。

字节码:中间代码表示

Java 和 Python 等编程语言提供了一个选项,可以将源代码编译成字节码,这是一种介于高级代码和机器代码之间的中间低级代码。这与直接与硬件交互的低级代码形成对比。相反,字节码由虚拟机执行。

Java Bytecode

Java 源文件以 .java 扩展名保存,并编译为以 .class 扩展名结尾的类文件。然后,这些类文件在 Java 虚拟机 (JVM) 上执行,JVM 将 Java 字节码编译为本机可执行的机器代码。

字节码的好处

  • 平台独立性:只要设备上安装了相应的虚拟机,字节码文件就可以在不同设备上移植。
  • 安全性:可以验证字节码的执行。
  • 优化:Python 字节码可以对字节码的执行进行即时编译和优化。

Python 字节码

关于 Python,.py 源文件被转换为 .pyc 文件,这些文件包含 Python 可执行字节码。

字节序:字节顺序很重要

字节序(Endianness)定义了字节序列如何在内存中存储。与字节相关的重要附加说明是字节序。

字节序类型

  1. 大端序:最高有效字节存储在最小的内存地址。
  2. 小端序:最低有效字节首先存储。

示例

4 字节十六进制数 0x12345678 存储为

  • 大端序:12 34 56 78
  • 小端序:78 56 34 12

字节序定义了字节的顺序,在将二进制数据从一个系统复制到另一个具有不同体系结构的系统时非常重要。通常,网络协议使用大端序格式,也称为网络字节顺序。

字符编码和多字节字符

如前所述,字节用于存储字符,但对全局语言的需求日益增长。支持它们需要比 ASCII 等单字节编码更多。因此,出现了 UTF-8 和 UTF-16 等多字节编码。

ASCII

  • 每个字符需要 1 字节存储。
  • 可以表示 128 个字符。

UTF-8

  • 编码的长度可能不同(每个字符 1 到 4 字节)
  • 向后兼容 ASCII。
  • 可以添加 Unicode 中的所有字符。

UTF-16

  • 每个字符 2 或 4 字节。
  • 适用于符号集较大的语言,如中文或日文。

这些格式有助于存储电子文本数据以及在全球范围内进行通信,而不管所使用的系统或语言。

字节的实际应用

文件大小:从文档、图像到视频和应用程序,您设备上的每个文件都以字节形式保存,创建一个独特排列的字母数字代码。例如:

  • 一个简单的文本文件大约是几 KB(千字节)。
  • 一张高清图片可能达到 2MB(兆字节)。1MB = 1,024KB。
  • 一部电影文件可能从 700MB 到几 GB(千兆字节),具体取决于视频质量和格式。

能够准确估计文件大小有助于用户更好地组织数据,尤其是在智能手机、计算机或云驱动器上存储数据时。

互联网数据使用:通过互联网,ISP(互联网服务提供商)和移动网络提供商以字节为单位跟踪您的数据使用情况。例如:

  • 浏览网页或查看电子邮件每小时可能低至 MB。
  • 每小时以高清格式流式传输视频可能使用约 3GB 的数据。
  • 下载游戏软件可能需要约 50GB 或更多。

跟踪基于字节的数据使用情况有助于管理额外年费或超过月度数据阈值。

数据传输:当人们访问或从互联网下载数据时,它是以字节或多个字节块的形式进行的;这包括查看网页、发送电子邮件和音频流。

  • 路由器和调制解调器等设备专门用于以字节大小的块使用数据。
  • TCP/IP 这样的通信协议是使用字节和块构建的,从而确保安全的数据移动。

嵌入式系统:在智能设备、汽车或工业机械等嵌入式系统中,微控制器使用基于精细级别的数据。

  • 字节可以构建这些指令,从而控制电机、LED 和传感器,使它们能够执行其活动。
  • 必须有效利用字节,因为它们只能在内存和处理速度受限的设备上使用。

字节顺序(Endianness):当处理整数、浮点数或更大的数据类型时,内存中存储的字节顺序或通过网络传输的字节顺序很重要。这也称为字节序。它只是关于字节如何在内存中存储或通过网络传输的定义。

  • 大端序:TCP/IP 等协议使用这种存储样式,将数字的最高有效字节存储在最低地址,也称为 MSB 优先。
  • 小端序:x86 体系结构使用,先存储最低有效数字。这是 Intel 和 Amd CPU 使用的顺序。

例如,取一个 32 位十六进制数,例如 0x12345678,它将按如下方式存储在内存中:

  • 大端序: 12 34 56 78
  • 小端序: 78 56 34 12

在具有不同字节序的系统交换数据的场景中,字节序变得很重要。许多编程语言、库和协议都提供了在主机和网络字节序之间进行转换的方法,以促进设备之间的通信。

常见问题解答 - 字节

1. 字节究竟是什么,为什么它很重要?

要在计算机上下载、存储或访问信息,就需要使用一种称为字节的特定数据形式——它总是包含八个比特。字节可以以 256 种不同的格式表示,范围从 0 到 255。字节在计算中至关重要,因为它们是存储图像、数字、字符甚至计算机可以处理的指令集等数据的核心基础。

2. 什么是字节顺序或 Endianness,为什么它很重要?

Endianness 或字节顺序是指字节在较大数据类型的内存中如何排序。这包括 32 位整数的顺序。主要有两种类别:大端序(最高有效字节在前)和小端序(从第一个字节开始)。

3. 字节与字符编码系统如何关联?

在 ASCII 系统中,每个字节都带有一个编码为文本的字符,这意味着一个字节能够编码 256 个给定字符。更复杂的选择,如 UTF-8,每个字符使用一到四字节。这使得正确处理和交换多语言数据成为可能。

4. 为什么字节在网络安全中很重要?

字节是攻击者可能利用的基础数据单元。缓冲区溢出等网络安全威胁是由过多的字节写入分配的容器之外引起的,从而可能执行恶意软件。安全编程实践需要通过细致地控制字节级别的数据来消除潜在的漏洞。

5. 字节如何在网络和多媒体等日常技术中使用?

字节构成了网络上传输的数据包头部和有效载荷的基本数据单元。图像、音频和视频被归类为多媒体文件,由数百万字节组成,存储视觉和声音信息。


下一主题Exabyte