Wave file header endianess

时间:2015-10-25 05:10:52

标签: c++ endianness

我正在用c ++编写代码来读取wave文件。我遵循我发现的wave文件规范here.

在下面的代码中,我正在读取chunksize,它存储在字节4,5,6,7中。

根据规范,这个int以4个字节的小端存储。

因此,如果这4个字节保持无符号值2,我认为它将如下..

4 5 6 7 00000010 00000000 00000000 00000000

因此,如果我尝试在Windows上将这4个字节作为int读取,我不需要做任何正确的事情吗?因为windows有点小端。所以这就是我做的......

unsigned int chunk_size = (hbytes[4] << 24) + (hbytes[5] << 16) + (hbytes[6] << 8) + hbytes[7];

但这不起作用,它给了我一个不正确的价值。当我交换字节的结尾时,它确实有效....

unsigned int chunk_size = (hbytes[7] << 24) + (hbytes[6] << 16) + (hbytes[5] << 8) + hbytes[4];

我有关于wavefiles的信息是否正确?这个int存储为小端吗?或者我对endianess的假设是否错误?

1 个答案:

答案 0 :(得分:0)

除了转换小端流的过程之外,你已经把一切都搞定了。

你的图是正确的:如果4字节字段保持2,那么第一个字节(hbytes [4])是2,剩下的字节是0.为什么你要将那个字节左移24?您想要左移的字节是高位字节,hbytes [7]。

相关问题