【问题标题】:RIFF Wave File Format: FourCC values and HEX conversionRIFF Wave 文件格式:FourCC 值和 HEX 转换
【发布时间】:2013-03-27 05:37:52
【问题描述】:

背景: 我正在解析 Riff/Wave 文件。有 documentation 标识 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 不匹配?我猜我对 Hex 到 Int 的转换一无所知。

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

感谢您的帮助。

【问题讨论】:

    标签: parsing hex wave chunks riff


    【解决方案1】:

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

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

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

    【讨论】:

    • 大卫,我怀疑字节序是相关的,但一位更有经验的程序员告诉我不是这样。当我正确阅读时,我会调查并标记您的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-10-04
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2011-09-06
    • 1970-01-01
    • 2018-03-11
    相关资源
    最近更新 更多