c - 从文件读取字节顺序
问题描述
嘿,我有一个涉及.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);
}
}
解决方案
推荐阅读
- haskell - Data.Vector 的 unsafeFreeze/unsafeThaw 到底有多“不安全”?
- azure - Azure VM 通过 powershell 的 Powerstate
- python - plotly dash,带有 2 个按钮输入和一个下拉输入的回调
- spring-boot - Jackson ObjectMapper 忽略 JsonInclude.Include.NON_NULL
- node.js - 根据子文档日期查找即将发布的文档
- c# - 如何使用 lambda 参数创建方法?
- javascript - Mongodb查询:在嵌套数组中搜索正则表达式
- json - play-json 写入是否支持索引路径?
- google-maps - 如何在颤动的谷歌地图自定义标记中添加额外的文本?
- reactjs - react-select 阻止菜单打开 onInputChange