我正在尝试使用 c 文件处理来解析 .wav 文件。我对我得到的输出有点困惑。下面给出的是我正在运行以解析 .wav 文件的代码,目前我只是在解析文件的标题部分。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char* ChunkId;
char* fmt;
u_int32_t ChunkSize;
}Header;
int main(void){
FILE * file = fopen("piano2.wav","r");
Header header;
header.ChunkId = malloc(sizeof(char) * 4);
header.fmt = malloc(sizeof(char) * 4);
if(file == NULL){
return 1;
}
fread(header.ChunkId,sizeof(char),4,file);
fread(&header.ChunkSize,sizeof(u_int32_t),1,file);
fread(header.fmt,sizeof(char),4,file);
printf("%s\n",header.ChunkId);
printf("%u\n",header.ChunkSize);
printf("%s\n",header.fmt);
fclose(file);
free(header.ChunkId);
free(header.fmt);
}
我在运行代码后得到这个输出。
RIFF
1210884
WAVE
输出的 RIFF 和 WAVE 部分对我来说很清楚,但第二行是我在理解上有一个小问题的地方。块大小实际上是多少?我很难计算它,我知道它是小端形式的 32 位数字,我有 unsigned int 形式的输出。我应该将其转换为十六进制吗?然后转换成big-endian再计算chunk size,还是输出本身就是chunk size?