Parsing RIFF波形文件格式:FourCC值和十六进制转换
上下文: 我正在解析Riff/Wave文件。识别Riff块中的FourCC值是很困难的。下面是wave文件中更重要的块 两个.wav特定块的FourCC ID: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
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与此相关,但一位更有经验的程序员告诉了我。我将对此进行调查,并在阅读正确后标记您的答案。非常感谢。