词典

字节序是什么意思?

字节序是你在查看文件元数据时会发现的隐藏细节之一。了解它是什么意思,以及它能告诉你你的文件是如何被写入的。

byte-order

字节序(Byte Order),也称为端序(endianness),用来描述较大数值在内存或文件中按字节存储的顺序。计算机可以从高端或低端开始写入这些字节,文件必须指明使用了哪一端开始写入,这样之后读取它的程序才能还原出相同的数值。

两种字节序

单独的一个字节是没有歧义的。超过一个字节的大数必须拆分到多个字节中存储,而正是在这里,两种不同的约定产生了差异:

  • 大端序(Big-endian):存储或传输从包含最高有效位的字节开始,之后字节的重要性依次降低
  • 小端序(Little-endian):存储或传输从包含最低有效位的字节开始,之后字节的重要性依次提高

以数字 4660 为例,它需要两个字节。大端序文件会把它写成 12 34,而小端序文件则写成 34 12。数值相同,顺序相反。也存在混合形式,被称为混合端序或中端序,但很少见。两种主要的字节序都在日常使用中,你看到哪一种取决于创建该文件的设备或程序。

哪些文件携带它

这一字段最常见于 TIFF 以及所有基于 TIFF 结构的格式中,其中包括 JPEG 照片内的 Exif 元数据块和 NEF、CR2、ARW、DNG 等相机 RAW 格式。这些文件以两个字母的标记开头,II 代表 Intel,MM 代表 Motorola,这两家公司处理器的设计分别推广了这两种字节序。报告通常会将其写成 Little-endian (Intel, II) 或 Big-endian (Motorola, MM)。是哪种字节序,由写入元数据的相机、扫描仪或程序决定。

音频封装格式在整体格式层面也做出了相同的选择:WAV 以小端序存储其数值,而 AIFF 以大端序存储。这也是两个可以包含完全相同声音采样的格式在字节级上不能互换的原因之一。

这对你的文件有何影响

字节序是导致在一台设备上写入的元数据在另一台设备上看起来像乱码的原因。如果读取程序忽略了标记,或假定了错误的字节序,它不会“优雅地失败”:而是会产生不可能存在的日期、荒谬的曝光数值、指向文件末端之外的长度,或者干脆声明元数据不可读。了解字节序可以帮助你判断文件应当如何被正确打开和处理。

如果你要编辑元数据,字节序的重要性会体现得更加明显,因为新写入的数值必须按文件声明的顺序写回。如果这个标记本身损坏,即使文件中的图像或音频完全完好,整个元数据块通常也会变得不可读取。该字段只描述文件的排布方式,不包含关于你或你设备的任何个人信息。