我正在尝试解析.wav文件头。如果我删除chunk_size +=...
行,我会得到预期结果:RIFF
,但是一旦我添加该行,我就会得到RIFFÄÿÿÿ
。为什么添加到chunk_size
的每个值显然“附加”到chunk_id
? chunk_id
如何拥有四个以上的元素?有些基本的数组或二进制数据是我不明白的吗?在char数组上使用cout
是不合适的吗?
struct Wave
{
Wave (FILE* file) {
char header[44];
uint size = fread(header, sizeof(char), 44, file);
chunk_size = 0;
for (uint i = 0; i < 4; i ++) {
chunk_id[i] = header[i];
chunk_size += header[i + 4] * pow(16, i);
}
cout << chunk_id;
}
char chunk_id[4];
uint chunk_size;
char format[4];
...
...
...
};
答案 0 :(得分:2)
cout << chunk_id;
仅在chunk_id
为空终止时有效。由于它不在您的程序中,因此该程序具有未定义的行为。
使chunk_id
包含5个元素的数组,并确保在构造函数中将其终止。
Wave (FILE* file) {
char header[44];
uint size = fread(header, sizeof(char), 44, file);
chunk_size = 0;
for (uint i = 0; i < 4; i ++) {
chunk_id[i] = header[i];
chunk_size += header[i + 4] * pow(16, i);
}
chunk_id[4] = '\0';
cout << chunk_id;
}
char chunk_id[5];