Parsing RIFF波形文件格式:FourCC值和十六进制转换

Parsing RIFF波形文件格式:FourCC值和十六进制转换,parsing,hex,wave,chunks,riff,Parsing,Hex,Wave,Chunks,Riff,上下文: 我正在解析Riff/Wave文件。识别Riff块中的FourCC值是很困难的。下面是wave文件中更重要的块 两个.wav特定块的FourCC ID: Chunk ID "fmt " (0x666D7420) Chunk ID "data" (0x64617461) 因此,这些fmt值应相等: string "fmt " Hex "666D7420" int "1718449184" string "data" Hex "64617461" int "168

上下文: 我正在解析Riff/Wave文件。识别Riff块中的FourCC值是很困难的。下面是wave文件中更重要的块

两个.wav特定块的FourCC ID:

 Chunk ID   "fmt " (0x666D7420)
 Chunk ID   "data" (0x64617461)
因此,这些fmt值应相等:

 string "fmt "
 Hex "666D7420"
 int "1718449184"
 string "data"
 Hex "64617461"
 int "1684108385"
并且,这些数据值应相等:

 string "fmt "
 Hex "666D7420"
 int "1718449184"
 string "data"
 Hex "64617461"
 int "1684108385"
现在,当我读入有效的.wav文件时,FourCC-fmtChunkID-fmtint总是:

 fmt int:
 int "544501094"
 data int:
 int "1635017060"
而数据int总是:

 fmt int:
 int "544501094"
 data int:
 int "1635017060"
问题: 为什么文档中的十六进制值与我从流返回的int不匹配?我猜我对十六进制到整数的转换有些不理解

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

谢谢你的帮助。

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

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


阅读“大端”和“小端”两个词。有些人会长篇大论地谈论它,但事实上,如果你曾经处理过文件格式、网络流量、与硬件的接口以及许多其他地方,那么理解它非常容易,而且很重要。

David,我怀疑endian order与此相关,但一位更有经验的程序员告诉了我。我将对此进行调查,并在阅读正确后标记您的答案。非常感谢。