上下文 我正在解析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”更多。最后,在Google上搜索“1718449184 AND 544501094”;什么都没有。
感谢您的帮助。
答案 0 :(得分:2)
尾段。 请参见十进制的0x20746d66。 (0x20746d66是0x666d7420字节的反转。)
在文件格式中,每个字节必须位于正确的位置。 如果您随意读入内存,取决于您的CPU与文件格式,您可以交换字节顺序。
阅读“Big Endian”和“Little Endian”。有些人会以非常长的篇幅对它进行讨论,但实际上这很容易,而且要理解你是处理文件格式,网络流量,与硬件的接口,还是很重要。许多其他地方。