1

上下文: 我正在解析 Riff/Wave 文件。有文档标识 Riff 块中的 FourCC 值。以下是波形文件更重要的块。

两个 .wav 特定块的 FourCC ID:

 Chunk ID   "fmt " (0x666D7420)
 Chunk ID   "data" (0x64617461)

因此,这些 fmt 值应该相等:

 string "fmt "
 Hex "666D7420"
 int "1718449184"

并且,这些数据值应该相等:

 string "data"
 Hex "64617461"
 int "1684108385"

现在,当我读入有效的 .wav 文件时,FourCC fmtChunkID fmt int总是:

 fmt int:
 int "544501094"

并且数据int始终是:

 data int:
 int "1635017060"

问题: 为什么记录的 Hex 值与我从流中返回的 int 不匹配?我猜我不了解十六进制到整数的转换。

额外: 我在网上找到了具有可疑 fmt 值“1718449184”的 .wav 解析器代码。但我发现更多 fmt 值“544501094”。最后,谷歌搜索“1718449184 AND 544501094”;没有。

感谢您的帮助。

4

1 回答 1

2

端。请参见十进制的 0x20746d66。(0x20746d66 是 0x666d7420 字节的反转。)

在文件格式中,每个字节都必须位于正确的位置。如果您随意将它们读入和读出内存,则取决于您的 CPU 与文件格式,您可以交换字节顺序。

阅读“Big Endian”和“Little Endian”。有些人会用很长的篇幅来讨论它,但实际上很容易理解,如果您曾经处理过文件格式、网络流量、与硬件的接口以及许多其他地方,那么了解它很重要。

于 2013-04-04T23:03:49.900 回答