你存在txt文件中的已经是二进制文件了,你打开txt文件时,操作系统会自动对这个二进制数据进行编码转换(如果你安装的是中文操作系统的话一般会用unicode编码转换,英文操作系统的话会用ASC编码转换),所以你看到的是系统转换后的样式。
如果你想在打开txt文件时看到的是二进格式的数字,那你只有先把double型数组转换成字符型然后保存到文件中就可以了!
你要存的是十进制数据吗?
dec 格式化为十进制数值数据 输入和输出
endl 输出一个换行符并刷新此流 输出
ends 输出一个空字符 输出
hex 格式化为十六进制数值数据 输入和输出
oct 格式化为八进制数值数据 输入和输出
setpxecision(int p) 设置浮点数的精度位数 输出
比如要把123当作十六进制输出:file1<
#include
#include
#include
#define N 100
int main()
{
int i,j,n,len;
char st[]="48494A4B4C4D4E4F";
char st2[N];
int char2num(char ch);
for (i=0;i
len=strlen(st);
j=0;
for (i=0;i
n=char2num(st[i])*16+char2num(st[i+1]);
st2[j++]=n;
}
printf("st2=%s",st2);
getch();
return 0;
}
int char2num(char ch) /*将字符转成数字*/
{
if (ch>='a')
return ch-'a'+10;
else if (ch>='A')
return ch-'A'+10;
else
return ch-'0';
}
/*我转出来的跟你的结果有点不一样,你的结果应当错了。*/
将double、int这样的数值型数据,直接写入文件,形成的是数据文件,其数据格式是按照内存中实际存储方式来写入的,不是文本方式。
如果希望将数值类型保存为可视化的文本文件,你需要将数值格式化为字符串,再写入文件就可以了(也可以直接使用格式化函数,如fprintf)。
写一个double类型数组,你可以参考一下代码:
char tmp[40];
double darray[10];
FILE *fp;
fp=fopen("dat.txt","w");
for(int i=0;i<10;i++){
sprintf(tmp,"%lf \n",darray[i]);//注意,高版本VS中要用sprintf_s
fwrite(tmp,strlen(tmp),1,fp);
}
fclose(fp);
数值型数据在内部存储中都是以二进制方式保存的,这样方便进行数值运算,在显示和保存的时候,如果希望变成可阅读的十进制数据,C/C++提供了很多格式化的方法,上述代码只是其中一例,各种格式化的概念基本一致,需要注意的是各个类型数据的格式化参数不同,例如double类型要用%lf或%g,而int类型要用%d