gpt4 book ai didi

c - 为什么wav文件头是0x4e0而不是0x0?

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:04 24 4
gpt4 key购买 nike

我有一个名为“file.wav”的 wav 文件,我想用 C 程序读取该文件的一些规范。我找到了 wav 文件的结构 here .根据这个文档,在一个普通的 wav 文件中,AudioFormat 字节应该是 0x1 和 0x0,或者 NumChannels 字节应该是(如果是单声道)0x1 和 0x0;有很多类似的部分应该看起来像这样。

现在,我的 C 程序非常简单:我以二进制模式打开文件,查找 AudioFormat 部分(第 20 个字节),读取两个字节并将它们放入缓冲区;然后我将缓冲区内容打印到标准输入。

#include <stdio.h>

main()
{
void *buf[2];
FILE *f;
f=fopen("file.wav", "rb");

fseek(f, 20, SEEK_SET);
fread(buf, 1, 2, f);
printf("example: %#hx %#hx\n", buf[0], buf[1]);
/*the '#' flag stands for the 0x[···] format output,
the 'h' says that the number is a short integer (2 bytes).*/


return 0;
}

我的问题是第二个字节而不是 0x0 总是 0x4e0,并且每个字节都应该是 0(例如 NumChannels 或 BitPerSamples 字节)。有什么问题?

最佳答案

如果幸运的话,您会在运行时收到编译警告或崩溃。虽然我认为对于这种特殊情况你不会,但我认为你所做的实际上不是未定义的行为。你的问题的核心是当你声明这个时:

void *buf[2];

您正在声明 buf 为指向 void 的指针的数组 2。当您访问 buf[0] 时,您读取的不是字节,而是指针。还有很多可以解释正在发生的事情,但我认为这对于你正在尝试做的事情来说已经足够了:

char buf[2];

关于c - 为什么wav文件头是0x4e0而不是0x0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14093616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com