问题 为什么整数字节向后存储?这仅适用于标头吗?


我正在尝试破译WAV文件。从标题到PCM数据。

我找到了一个PDF(http://www.tdt.com/T2Support/technical_notes/tn0132.pdf详细说明了WAV文件的解剖结构,我已经能够使用Ghex2提取和理解相应的标题数据。但我的问题是:

为什么整数字节向后存储?即(分解)。 20存储为0x14000000而不是0x00000014。

PCM数据的整数是否也向后存储?


9482
2017-09-11 20:02


起源

没有“倒退”。一切都按照惯例。搜索维基百科的Endianness。 - Detmar
...一旦你清楚大小和小端都是合理的,试着把你的思想包裹在混合的字节序中。然后哭。 - dmckee
小端虽然不合理。 那怎么合理? - MarcusJ


答案:


WAV文件是little-endian(最不重要的字节),因为格式源自在基于intel处理器的机器上运行的操作系统,这些机器使用小端格式来存储数字。

如果您认为它有意义,因为如果您想将长整数转换为短整数或甚至是字符,起始地址保持不变,您只需查看较少的字节。

因此,对于向上16位编码,小端格式也将用于PCM。这非常方便,因为您可以将它们作为整数拉入。不要忘记如果它们是16位,它们将被存储为两个补码有符号整数,但如果它们是8位则不会存储。 (看到 http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html 更多细节)


12
2017-09-11 20:31



奇怪的是,所提到的页面声明该数字应该以big-endian形式存储(但格式实际上确实使用little-endian)。 - Groo
所提到的页面不再陈述任何东西,因为它已经消失了......(我发现这种情况经常发生在几年后的大学网站链接上。) - Peter Hansen
我不确定我的文件是否符合或不符合,但所有数字字段(采样率,比特率等)都存储在小端,而所有字段(RIFF,WAVE,fmt等)存储在big endian中。 - MarcusJ


“倒退”是主观的。有些机器很大 - 尾数,其他人很少 - 尾数。在面向字节的上下文中,如文件格式和网络协议,顺序是任意的。有些格式喜欢指定大端或小端,有些则喜欢灵活并接受任何一种形式,并带有一个标志,指示哪些正在使用中。

看起来像WAV文件就像小端。


3
2017-09-11 20:08