Чтение по порядку байтов из файла - PullRequest
0 голосов
/ 16 апреля 2020

Эй, у меня есть проект, включающий .wav файлы. Я нашел несколько способов получить заголовок из этого файла, но меня смущает одна вещь. http://soundfile.sapp.org/doc/WaveFormat/ На этом сайте говорится, что некоторые данные являются Littlendian, а некоторые - Bigendian

Мой вопрос: почему это работает, когда я читаю данные одинаково и как-то правильно? ? Почему мне не нужно указывать, в каком порядке мне нужно получать данные. Возможно, это глупый вопрос, но мне не нужно было вдаваться в эти мелкие детали до сих пор.

 typedef struct wavHeader {
    byte chunckID[4];
    dword chunckSize;
    byte format[4];
    byte subchunk1ID[4];
    dword subchunk1Size;
    word audioFormat;
    word numChannels;
    dword sampleRate;
    dword byteRate;
    word blockAlign;
    word bitsPerSample;
    byte subchunk2ID[4];
    dword subchunk2Size;
 }
 wav_header;

 int check_file_name(char * filename);

 void list(char ** array) //argv
 {
    wav_header wavHeader;
    FILE * pFile;
    if (check_file_name(array[2]) == 0) {
        printf("wrong file name\n");
        exit(1);
    }
    pFile = fopen(array[2], "r");
    if (pFile != NULL) {
        fread( & wavHeader, sizeof(wav_header), 1, pFile);
        fclose(pFile);
        printf("ChunkID: %c%c%c%c\n", wavHeader.chunckID[0], wavHeader.chunckID[1], wavHeader.chunckID[2], wavHeader.chunckID[3]);
        printf("ChunkSize: %d\n", wavHeader.chunckSize);
        printf("Format: %c%c%c%c\n", wavHeader.format[0], wavHeader.format[1], wavHeader.format[2], wavHeader.format[3]);
        printf("SubChunk1ID: %c%c%c%c\n", wavHeader.subchunk1ID[0], wavHeader.subchunk1ID[1], wavHeader.subchunk1ID[2], wavHeader.subchunk1ID[3]);
        printf("Subchunk1Size: %d\n", wavHeader.subchunk1Size);
        printf("AudioFormat: %d\n", wavHeader.audioFormat);
        printf("NumChannels: %d\n", wavHeader.numChannels);
        printf("SampleRate: %d\n", wavHeader.sampleRate);
        printf("ByteRate: %d\n", wavHeader.byteRate);
        printf("BlockAlign: %d\n", wavHeader.blockAlign);
        printf("BitsPerSample: %d\n", wavHeader.bitsPerSample);
        printf("Subchunk2ID: %c%c%c%c\n", wavHeader.subchunk2ID[0], wavHeader.subchunk2ID[1], wavHeader.subchunk2ID[2], wavHeader.subchunk2ID[3]);
        printf("Subchunk2Size: %d\n", wavHeader.subchunk2Size);
    } else {
        printf("This file doesn't exit\n");
        exit(1);
    }
 }
...