|
最近在学习Arm的IIS接口,碰到要将WAVE文件转化成数组文件的情况
手头没有软件, 没有网络所以用TurboC编了一个程序进行转换
WAVE文件的头:RIFF header(8Bytes)前4字节固定为"RIFF",后4字节为总字节数(小端模式)
把WAV文件改名为TEST.wav 存放数组内容文件为ABC.txt
功能好像是完成了,但有两个疑问:
1)WAV文件的末尾有没有EOF字符?有懂行朋友给介绍一下
我是按没有EOF来处理的,文件长度包含在RIFF header中的.
2)末尾有好多0xFF,这个正常吗?这个是WindowXP关机的WAVE文件.
#include <stdio.h>
void main(void)
{
FILE * fpin;
FILE * fpout;
unsigned char unchar, num[4];
unsigned char i=4;
long int length;
unsigned char checkout=0;
if((fpout=fopen("ABC.txt", "w"))==NULL)
{
printf("cannot open file ABC.txt\n");
exit(0);
}
if((fpin=fopen("TEST.wav","r"))==NULL)
{
printf("cannot open file TEST.wav\n");
exit(0);
}
/*output RIFF*/
while(i--)
{
unchar = fgetc(fpin);
fprintf(fpout,"0x%x, ", unchar);
checkout++;
if(checkout==10)
{
checkout = 0;
fputs("\n",fpout); /*每10个数换1次行*/
}
}
/*output total number!*/
i=4;
while(i--)
{
unchar = fgetc(fpin);
fprintf(fpout,"0x%x, ", unchar);
num=unchar;
checkout++;
if(checkout==10)
{
checkout = 0;
fputs("\n",fpout); /*每10个数换1次行*/
}
}
/*output large*/
length=(long)(num[0])*256*256*256+(long)(num[1])*256*256+(long)(num[2])*256+num[3];
printf("length=%ld ",length);
while(length--)
{
unchar = fgetc(fpin);
fprintf(fpout,"0x%x, ", unchar);
checkout++;
if(checkout==10)
{
checkout = 0;
fputs("\n",fpout); /*每10个数换1次行*/
}
}
printf("\nTransform complete!\n");
fclose(fpin);
fclose(fpout);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|