我试图从文件中读取以下二进制文件(01100001)并将其转换为 ascii 代码(97),但是当使用 fread 时我得到了一个非常大的数字。
文件“c:/input.txt”仅包含以下行 -01100001
数组值的 printf 打印大数字,例如 825241648
My code:
int main()
{
unsigned int arr[8];
int cnt,i,temp=0;
FILE * input;
if(!(input=fopen("C:/input.txt","r")))
{
fprintf(stderr,"cannot open file\n");
exit(0);
}
cnt = fread(arr,1,8,input);
for(i=0;i<cnt;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
知道为什么吗?
arr
是一个整数数组。但你只读到了 8 个字节。因此,您的第一个整数将具有一些大值,第二个整数也将具有一些大值,但之后它们将具有垃圾值。 (你做了arr
一个“自动”变量,它在堆栈上分配,因此其中会有随机垃圾;如果将其设为静态变量,它将被预先初始化为零字节。)
如果您更改声明arr
所以它是类型char
,您可以读取您的字符串,并且您的for
循环将一次一个地循环这些字节。
然后你可以编写一个字符串到二进制的转换器,或者你可以使用strtol()
将基数设置为 2 进行转换。strtol()
并非在所有编译器中都可用; GCC 很好,但 Microsoft C 没有。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)