急求前辈们帮忙!解决方法
急求前辈们帮忙!!!
我现在有一个程序,是读取wave文件,然后以16进制形式显示文本上。若要以二进制显示在文本上应该怎么修改???请前辈们帮帮忙!!急急急急急!!!
程序如下:
#include "stdio.h "
void main()
{
FILE *in,*out;
char infile[100],outfile[100];
int i = 1;
printf( " infile name:\n ");
scanf( " %s ",infile);
printf( "outfile name:\n ");
scanf( " %s ",outfile);
if ((in=fopen (infile, "rb "))==NULL)
{
printf( "cant open infile\n ");
exit(0);
}
if ((out=fopen(outfile, "w "))==NULL)
{
printf( "cant open outfile\n ");
exit(0);
}
while(!feof(in))
{
fprintf(out, "0x%02x ", fgetc(in));
if ((i++) % 15 == 0)
fprintf(out, "\n ");
}
fclose(in);
fclose(out);
}
------解决方案--------------------
#include "stdlib.h "
#include "stdio.h "
static char* BinStr[]=
{
"0000 ", "0001 ", "0010 ", "0011 ",
"0100 ", "0101 ", "0110 ", "0111 ",
"1000 ", "1001 ", "1010 ", "1011 ",
"1100 ", "1101 ", "1110 ", "1111 "
};
int HexToIndex(char a)
{
int c = a- '0 ';
if (a> '9 ') c = a- 'a '+10;
if (c <0 || c> 15) c=0;
return c;
}
int main()
{
FILE *in,*out;
char infile[100],outfile[100];
char hexChar[3]={ '\0 '};
int i = 1;
printf( " infile name:\n ");
scanf( " %s ",infile);
printf( "outfile name:\n ");
scanf( " %s ",outfile);
if ((in=fopen (infile, "rb "))==NULL)
{
printf( "cant open infile\n ");
exit(0);
}
if ((out=fopen(outfile, "w "))==NULL)
{
printf( "cant open outfile\n ");
exit(0);
}
while(!feof(in))
{
char c = fgetc(in);
if (c!=EOF) {
sprintf(hexChar, "%02x ", c);
fprintf(out, "%s%s ",BinStr[HexToIndex(hexChar[0])], BinStr[HexToIndex(hexChar[1])]);
if ((i++) % 15 == 0) fprintf(out, "\n ");
}
}
fclose(in);
fclose(out);
system( "pause ");
return 0;
}
我现在有一个程序,是读取wave文件,然后以16进制形式显示文本上。若要以二进制显示在文本上应该怎么修改???请前辈们帮帮忙!!急急急急急!!!
程序如下:
#include "stdio.h "
void main()
{
FILE *in,*out;
char infile[100],outfile[100];
int i = 1;
printf( " infile name:\n ");
scanf( " %s ",infile);
printf( "outfile name:\n ");
scanf( " %s ",outfile);
if ((in=fopen (infile, "rb "))==NULL)
{
printf( "cant open infile\n ");
exit(0);
}
if ((out=fopen(outfile, "w "))==NULL)
{
printf( "cant open outfile\n ");
exit(0);
}
while(!feof(in))
{
fprintf(out, "0x%02x ", fgetc(in));
if ((i++) % 15 == 0)
fprintf(out, "\n ");
}
fclose(in);
fclose(out);
}
------解决方案--------------------
#include "stdlib.h "
#include "stdio.h "
static char* BinStr[]=
{
"0000 ", "0001 ", "0010 ", "0011 ",
"0100 ", "0101 ", "0110 ", "0111 ",
"1000 ", "1001 ", "1010 ", "1011 ",
"1100 ", "1101 ", "1110 ", "1111 "
};
int HexToIndex(char a)
{
int c = a- '0 ';
if (a> '9 ') c = a- 'a '+10;
if (c <0 || c> 15) c=0;
return c;
}
int main()
{
FILE *in,*out;
char infile[100],outfile[100];
char hexChar[3]={ '\0 '};
int i = 1;
printf( " infile name:\n ");
scanf( " %s ",infile);
printf( "outfile name:\n ");
scanf( " %s ",outfile);
if ((in=fopen (infile, "rb "))==NULL)
{
printf( "cant open infile\n ");
exit(0);
}
if ((out=fopen(outfile, "w "))==NULL)
{
printf( "cant open outfile\n ");
exit(0);
}
while(!feof(in))
{
char c = fgetc(in);
if (c!=EOF) {
sprintf(hexChar, "%02x ", c);
fprintf(out, "%s%s ",BinStr[HexToIndex(hexChar[0])], BinStr[HexToIndex(hexChar[1])]);
if ((i++) % 15 == 0) fprintf(out, "\n ");
}
}
fclose(in);
fclose(out);
system( "pause ");
return 0;
}