我正在用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的假设是否错误?
答案 0 :(得分:0)
除了转换小端流的过程之外,你已经把一切都搞定了。
你的图是正确的:如果4字节字段保持2,那么第一个字节(hbytes [4])是2,剩下的字节是0.为什么你要将那个字节左移24?您想要左移的字节是高位字节,hbytes [7]。