读取wav文件时文件出错,该如何解决
读取wav文件时文件出错
void main()
{
int i;
long size;
FILE *fp;
// char b = 0;
// int c = b;
// cout<<b;
// cout<<c;
fp = fopen("A001.wav","rb");
fseek(fp,40,SEEK_SET);
fread(&size,sizeof(long),1,fp);
fstream outfile;
outfile.open("luo.txt",ios::out);
long datalen = size/2;
short *a = new short[datalen];
fseek(fp, 44, SEEK_SET);
for(i=0;i<size;i++)
{
fread(&a[i], sizeof(short), 1, fp);
// outfile<<a[i]<<" ";
cout<<a[i]<<" ";
}
// fread((char *)a, sizeof(char), size, fp);
delete []a;
fclose(fp);
outfile.close();
}
代码如上,以“r”方式读文件出错了,以“rb”方式就是正确的,为什么呢,还有就是a[0]正确数据是5时(rb方式),而错误的结果为什么是-12851(r)方式,我想知道怎么由变成了-12851,就是以r方式读时这个数是怎么得出来,希望有智者点拨,谢谢
------解决方案--------------------
rb是以二进制读取,这样不会理会特殊字符的问题,r的话就不行了,比如遇到回车换行符等,就要出问题了
void main()
{
int i;
long size;
FILE *fp;
// char b = 0;
// int c = b;
// cout<<b;
// cout<<c;
fp = fopen("A001.wav","rb");
fseek(fp,40,SEEK_SET);
fread(&size,sizeof(long),1,fp);
fstream outfile;
outfile.open("luo.txt",ios::out);
long datalen = size/2;
short *a = new short[datalen];
fseek(fp, 44, SEEK_SET);
for(i=0;i<size;i++)
{
fread(&a[i], sizeof(short), 1, fp);
// outfile<<a[i]<<" ";
cout<<a[i]<<" ";
}
// fread((char *)a, sizeof(char), size, fp);
delete []a;
fclose(fp);
outfile.close();
}
代码如上,以“r”方式读文件出错了,以“rb”方式就是正确的,为什么呢,还有就是a[0]正确数据是5时(rb方式),而错误的结果为什么是-12851(r)方式,我想知道怎么由变成了-12851,就是以r方式读时这个数是怎么得出来,希望有智者点拨,谢谢
------解决方案--------------------
rb是以二进制读取,这样不会理会特殊字符的问题,r的话就不行了,比如遇到回车换行符等,就要出问题了