原理:
1.首先说明,输出的内容是一个一个的字符。而不再是整数。以输入98341为例。
2.如果将int i=98341,通过fwrite()函数写到文件中,必然会是乱码。因为,文件中存储的是整数98341的二进制码。而以文本打开,是以ASCII码格式解析的。这样,解析出来的值对应相应的字符,因此会是乱码。
3.如果想要正确显示,需要在写入文件前,进行数字与字符ASCII码的转换,保证存储的是,文本文件可以解析的ASCII码。测试程序如下,可读性不好,只是做实验。
#include <stdlib.h>
#include <stdio.h>
//用于统计,要除10,100,1000?用于逐位进行转换。9变成‘9’,8变成‘8’等等。
int multi(int num)
{
int mult=1;
for(int i=1; i<num; i++)
mult=mult*10;
return mult;
}
// 转换函数
void change(int num)
{
FILE *fp;
int i=0;
if((fp=fopen("test.txt","w+"))==NULL)
{
printf("open fail!\n");
return ;
}
//统计输入的数的位数,98341的count为5,以后很有用。
int count=0;
i=num;
while(i)
{
count++;
i=i/10;
}
char a[10]="";// 初始化为空串
int k = multi(count); // k返回10000
int t=1; //用于循环结束判断
int j=0;
while(t)
{
a[j]=num/k+48; //转换为ASCII码
t=num/10;
num=num%k; // 去除最高位
j++;
k=k/10;
}
fwrite( a,sizeof(char)*count,1,fp); // 写入fp指向的文件
fclose(fp);
}
void main()
{
int num;
printf("input the int number:\n");
scanf("%d",&num);
change(i);
system("pause");
}
输出为:98341