有人可以向我解释一下这个 Chunk Size 值吗

Posted

技术标签:

【中文标题】有人可以向我解释一下这个 Chunk Size 值吗【英文标题】:Can someone explain to me this Chunk Size value 【发布时间】:2018-12-09 12:17:10 【问题描述】:

所以我有一个包含 110528 字节的波形文件,我将这个波形文件转换为十六进制:

byte[] myWaveFile = System.IO.File.ReadAllBytes(Server.MapPath("/") + "/Funny.wav");
string myHexFile = ToHex(myWaveFile, 0, myWaveFile.Length);

// myHexFile = "52494646B8AF0100......";

wave 文件的第一部分是 Chunk ID,即:"52494646" = "RIFF" 但我的第二部分是“B8AF0100”,它基本上是以字节为单位的块大小。

这个值“B8AF0100”如何等于波形文件大小?我将此值转换为它给我的整数:3098476800,与 110528 无关!

【问题讨论】:

【参考方案1】:

来自linked page

WAVE 数据文件的默认字节顺序是 little-endian。使用 big-endian 字节排序方案编写的文件具有标识符 RIFX 而不是 RIFF。

组成块大小的四个字节是B8AF0100。由于您的文件具有标识符 RIFF,因此它是 little-endian。这意味着最低有效字节首先出现。因此块大小不是十六进制的B8AF0100,而是0001AFB8。计算结果为 110520,比文件大小小 8 个字节。

【讨论】:

好的,我现在明白了,谢谢,最后一个问题,我的机器是 little-endian 正确的,所以对于我的波形文件的第一部分,我得到“52494646”,我应该得到“46464952”而不是“52494646”。因为在这个网站:soundfile.sapp.org/doc/WaveFormat,它说 chunkid = (52494646 in big-endian form) @MehdiSouregi:字节序仅与如何将字节放在一起以生成多字节整数有关。块大小是一个整数,因此您需要知道组合字节以组成该整数的顺序。块 ID 不是整数,它是四个字节 RIFF,必须按此顺序出现。因此,您应该为前四个字节(您这样做)获得52494646,而不是46464952

以上是关于有人可以向我解释一下这个 Chunk Size 值吗的主要内容,如果未能解决你的问题,请参考以下文章

有人能解释一下这个功能吗

有人可以向我解释一下逻辑回归中成本函数和梯度下降方程之间的区别吗?

有人可以简单地向我解释啥是有向无环图吗?

有人可以向我解释为啥 L(长)必须在那里吗? [复制]

有人可以像我五岁那样向我解释 chmod 权限吗? [关闭]

有人可以向我解释为什么返回语句应包含在此代码中?