
C++中怎么将二进制数据转换成ASC码
我有一组double型的数组,要将他存到txt文件中,但是C++中存的形式是二进制,txt中显示怎么是按ASC码显示的,比如C的数据是97,存到txt中却显示为a,怎么才...
我有一组double型的数组,要将他存到txt文件中,但是C++中存的形式是二进制,txt中显示怎么是按ASC码显示的,比如C的数据是97,存到txt中却显示为a,怎么才能存啊?
展开
展开全部
你存在txt文件中的已经是二进制文件了,你打开txt文件时,操作系统会自动对这个二进制数据进行编码转换(如果你安装的是中文操作系统的话一般会用unicode编码转换,英文操作系统的话会用ASC编码转换),所以你看到的是系统转换后的样式。
如果你想在打开txt文件时看到的是二进格式的数字,那你只有先把double型数组转换成字符型然后保存到文件中就可以了!
如果你想在打开txt文件时看到的是二进格式的数字,那你只有先把double型数组转换成字符型然后保存到文件中就可以了!
追问
怎么转换啊?如果用ecvt函数的话不能保存小数点啊
追答
你如果只是想存double数组中的数据的话,很简单,只要循环把这个数组中的每一个double型变量依次保存到文件中就可以了啊!
是不是你写文件时把double型变量又转换成其它格式了,记得存数据时要用%d格式。
或者你直接对整个数组变量进行写文件保存?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要存的是十进制数据吗?
dec 格式化为十进制数值数据 输入和输出
endl 输出一个换行符并刷新此流 输出
ends 输出一个空字符 输出
hex 格式化为十六进制数值数据 输入和输出
oct 格式化为八进制数值数据 输入和输出
setpxecision(int p) 设置浮点数的精度位数 输出
比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输
出:file1<<setpxecision(5)<<3.1415926。
dec 格式化为十进制数值数据 输入和输出
endl 输出一个换行符并刷新此流 输出
ends 输出一个空字符 输出
hex 格式化为十六进制数值数据 输入和输出
oct 格式化为八进制数值数据 输入和输出
setpxecision(int p) 设置浮点数的精度位数 输出
比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输
出:file1<<setpxecision(5)<<3.1415926。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 100
int main()
{
int i,j,n,len;
char st[]="48494A4B4C4D4E4F";
char st2[N];
int char2num(char ch);
for (i=0;i<N;i++)
st2[i]=0;
len=strlen(st);
j=0;
for (i=0;i<len;i+=2)
{
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';
}
/*我转出来的跟你的结果有点不一样,你的结果应当错了。*/
#include <conio.h>
#include <string.h>
#define N 100
int main()
{
int i,j,n,len;
char st[]="48494A4B4C4D4E4F";
char st2[N];
int char2num(char ch);
for (i=0;i<N;i++)
st2[i]=0;
len=strlen(st);
j=0;
for (i=0;i<len;i+=2)
{
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
如果希望将数值类型保存为可视化的文本文件,你需要将数值格式化为字符串,再写入文件就可以了(也可以直接使用格式化函数,如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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询