Context: 我正在解析Riff / Wave文件 . 有documentation标识Riff块中的FourCC值 . 以下是wave文件的更重要的块 .
FourCC ID for two .wav specific chunks:
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"
Question: 为什么没有't the documented Hex value match the int I am returning from the stream? I'猜测我对Hex到Int的转换不了解 .
Extra: 我在网上找到了具有可疑fmt值"1718449184"的.wav解析器代码 . 但我发现更多fmt值"544501094" . 最后,在Google上搜索"1718449184 AND 544501094";没有 .
感谢您的帮助 .
1 回答
尾段 . 请参见十进制的0x20746d66 . (0x20746d66是0x666d7420字节的反转 . )
在文件格式中,每个字节必须位于正确的位置 . 如果您随意读取内存和内存,取决于您的CPU与文件格式,您可以获得交换的字节顺序 .
阅读“Big Endian”和“Little Endian” . 有些人会以非常长的篇幅对它进行讨论,但实际上非常容易,而且了解您是否处理文件格式,网络流量,与硬件接口以及许多其他地方都很重要 .