Я пытаюсь проанализировать заголовок файла .wav. Если я удалю строку chunk_size +=...
, я получаю результат ожидания: RIFF
, но как только я добавлю эту строку, я получаю RIFFÄÿÿÿ
. Почему каждая добавленная стоимость добавляется к chunk_size
, по-видимому, «прилагается» к chunk_id
? Как может chunk_id
иметь более четырех элементов? Есть ли что-то основное в массивах или двоичных данных, которые я не понимаю? Нельзя ли использовать cout
в массиве символов? толькоДобавление в int изменяет отдельный массив символов?
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];
...
...
...
};
Возможно, вы не понимаете, как работает 'cout << chunk_id'. Кажется, у вас есть массивы и двоичные данные. –
Файл был открыт в двоичном режиме, я полагаю? – PaulMcKenzie
'pow (16, i);' - это не гарантируется, поскольку вы ожидаете его: http://stackoverflow.com/questions/25678481/why-pown-2-return-24-when-n- 5 – PaulMcKenzie