我正在尝试练习文件I / O.我正在尝试编写一个程序来读取任何文件(文本或二进制文件)并以十六进制和ascii打印内容。问题是我试图弄清楚编译器如何知道文件是文本还是二进制文件。我在下面提供的代码将二进制转换为十六进制。我也不确定如何将所需的输出打印到屏幕上。我已尝试使用put函数,但它会导致程序中出现很多错误。关于编译器如何知道文件是文本还是二进制文件的任何想法。我想我们可以使用if语句,但我不确定。
#include <stdio.h>
int main(int argc, const char * argv[]) {
FILE * file;
file = fopen( "test.txt" , "r");
char textFile[1000];
while (!feof(file)) {
fgets(textFile, 1000, file);
char binaryNumber[1000],hexaDecimal[1000];
int temp;
long int i=0,j=0;
while(binaryNumber[i]){
binaryNumber[i] = binaryNumber[i] -48;
++i;
}
--i;
while(i-2>=0){
temp = binaryNumber[i-3] *8 + binaryNumber[i-2] *4 + binaryNumber[i-1] *2 + binaryNumber[i] ;
if(temp > 9)
hexaDecimal[j++] = temp + 55;
else
hexaDecimal[j++] = temp + 48;
i=i-4;
}
if(i ==1)
hexaDecimal[j] = binaryNumber[i-1] *2 + binaryNumber[i] + 48 ;
else if(i==0)
hexaDecimal[j] = binaryNumber[i] + 48 ;
else
--j;
printf("Equivalent hexadecimal value: ");
while(j>=0){
printf("%c",hexaDecimal[j--]);
}
return 0;
}
}
fclose(file);