Учитывая WAV-файл, я хотел бы распечатать ChunkSize, SubChunk1Size и SubChunk2Size.C, Wav File Chunk Sizes Issue
Ниже приведен код, который я написал:
#include <stdio.h>
#include <stdlib.h>
struct wavFile{
char ChunkID[4]; //"RIFF", GOOD
unsigned int ChunkSize;
char Format[4]; //"WAVE", GOOD
char Subchunk1ID[4]; //"fmt", GOOD
unsigned int Subchunk1Size; //GOOD
unsigned short int AudioFormat; //GOOD
unsigned short int NumChannels; //GOOD
unsigned int SampleRate; //GOOD
unsigned int ByteRate;
unsigned int BlockAlign;
unsigned int BitsPerSample;
char SubChunk2ID[4]; //"data", prints weird symbols instead of "data"
unsigned int Subchunk2Size;
};
int main()
{
struct wavFile w;
int headerSize = sizeof(w);
FILE *fp;
fp = fopen(wavFilePathGoesHere, "r");
fread(&w, headerSize, 1, fp);
printf("ChunkSize: %d, SubChunk1Size: %d, SubChunk2Size: %d\n", w.ChunkSize, w.Subchunk1Size, w.Subchunk2Size);
//SubChunk2Size: -76154081
fclose(fp);
return 0;
}
Переменные, которые я комментировал в структуре как «хорошее» на самом деле дают правильных значения, так что то хорошее. Оператор printf дает отрицательное значение SubChunk2Size (-76154081). Конечно, это не так. Я не знаю, что я здесь делаю неправильно.
Является ли ваш размер структуры правильным? Вам лучше проверить это, а затем упаковать, чтобы он работал правильно. –
Если честно, я не уверен на 100%. Я буквально только что узнал о структурах. Я совершенно не знаком с C. –
Помните, что не все архитектуры используют немного endian, поэтому простое чтение данных непосредственно в память, как это, не переносимо. Кроме того, Карл Норум поднял вопрос о упаковке. Опять же, это переносимость, которая не всегда дает одинаковые результаты для разных компиляторов. Если вы заинтересованы, прочитайте дополнительную информацию о структуре. – paddy