因为我用C语言编码已经有一段时间但是有些奇怪的事情正在发生。也许有人可以运行我的代码,看看输出是否相同。它似乎不是打印零,并且“数据输出”似乎不打印。
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <io.h>
#include <conio.h>
void main(void)
{
int i;
long n;
FILE *wavFile;
printf("The data output \n\n\r");
wavFile = fopen("bigbrain.wav","rb");
while(feof(wavFile)==0)
{
i = getw(wavFile);
if(ferror(wavFile)!=0)
{
printf("\n an error has occured");
n = ftell(wavFile);
printf("\nThe value of n is %ld",n);
getch();
}
printf("%x",i);
}
n = ftell(wavFile);
printf("\n\The value of n is %ld",n);
fclose(wavFile);
printf("\n\nEnd of File");
getch();
}
我从中得到的结果是。由于它是一个波形文件,我认为应该有一些占位零。有没有人看错了什么?
4646495212c524556415720746d6610100012b112b118
这就是我通过交叉引用手动打破数据的方式,我知道应该在那里。
//Winamp says Unsigned 8-bit PCM; 1 channel; 11025Hz
46464952 //"RIFF"
12c52 //size: actuall size 76890, says 76882. My doc says correct because minus 8 bits for fields not included
45564157 //format "WAVE"
20746d66 //subchunkID 0x666d7420 but in big endian
10100012 //subchunk 1 size, expecting 16
b1 //audio format
1 //number of channels
2b11 //sample rate: file should be 11025 (ox2b11)
8000 //byte rate
//block align
1 //bits per sample... i think it cut off zero so 0x10 for 16
61746164 //start of data it's "data" 0x64617461 in big endian
答案 0 :(得分:1)
更改
printf("%x",i);
到
printf("%08x, i);
这将确保打印8位数字,前导零。
此外,在解析波形文件时,您可能会fread
将标头放入缓冲区,您将检查该缓冲区,而不是在{{{}中逐字节 1 工作。 1}}循环。
1 - 实际上是逐字逐句,因为你使用!feof()
,我甚至都不知道。