c/c++ 打开十六进制的文件 并以十进制输出
答案:5 悬赏:50 手机版
解决时间 2021-04-18 16:44
- 提问者网友:趣果有间
- 2021-04-18 12:08
c/c++ 打开十六进制的文件 并以十进制输出
最佳答案
- 五星知识达人网友:野慌
- 2021-04-18 12:59
你的程序从语法上没有问题,编译时应该没错误,但执行时,提示fread问题,可能是找不到文件,也就是说fp==NULL,所以你最好将程序做点修改,加上出错处理:
if ((fp = fopen("abc.DRM","rb"))==NULL)
{
fprintf("\n文件打开错误");
}
else
{
……
}
还有,你可能得不到想要的结果,原因是这样:
1.读出的四个字节,数据是:23 D4 45 AE,而不是23 D4;不知你的原意是否如此?
2.*(long*)tep_no强制转换时,数据会是0xAE45D423对应的十进制数,原因是系统中数据是逆序的,即低字节在前,高字节在后。所以你要做换序处理。追问我其实有一个完整的程序 只是想将其中更加完善 你说系统中数据是逆序的 这是怎么回事儿 恩 其实数据之间没有空格 我要的就是23 D4 45 AE追答逆序就是:tep_no[4]=“23 D4 45 AE”
但*(long*)tep_no=0xAE45D423
if ((fp = fopen("abc.DRM","rb"))==NULL)
{
fprintf("\n文件打开错误");
}
else
{
……
}
还有,你可能得不到想要的结果,原因是这样:
1.读出的四个字节,数据是:23 D4 45 AE,而不是23 D4;不知你的原意是否如此?
2.*(long*)tep_no强制转换时,数据会是0xAE45D423对应的十进制数,原因是系统中数据是逆序的,即低字节在前,高字节在后。所以你要做换序处理。追问我其实有一个完整的程序 只是想将其中更加完善 你说系统中数据是逆序的 这是怎么回事儿 恩 其实数据之间没有空格 我要的就是23 D4 45 AE追答逆序就是:tep_no[4]=“23 D4 45 AE”
但*(long*)tep_no=0xAE45D423
全部回答
- 1楼网友:一叶十三刺
- 2021-04-18 16:19
你的程序从语法上没有问题,编译时应该没错误,但执行时,提示fread问题,可能是找不到文件,也就是说fp==NULL,所以你最好将程序做点修改,加上出错处理:
if ((fp = fopen("abc.DRM","rb"))==NULL)
{
fprintf("\n文件打开错误");
}
else
{
……
}
还有,你可能得不到想要的结果,原因是这样:
1.读出的四个字节,数据是:23 D4 45 AE,而不是23 D4;不知你的原意是否如此?
2.*(long*)tep_no强制转换时,数据会是0xAE45D423对应的十进制数,原因是系统中数据是逆序的,即低字节在前,高字节在后。所以你要做换序处理。
if ((fp = fopen("abc.DRM","rb"))==NULL)
{
fprintf("\n文件打开错误");
}
else
{
……
}
还有,你可能得不到想要的结果,原因是这样:
1.读出的四个字节,数据是:23 D4 45 AE,而不是23 D4;不知你的原意是否如此?
2.*(long*)tep_no强制转换时,数据会是0xAE45D423对应的十进制数,原因是系统中数据是逆序的,即低字节在前,高字节在后。所以你要做换序处理。
- 2楼网友:舊物识亽
- 2021-04-18 15:25
vc6.0编译没出错
- 3楼网友:轮獄道
- 2021-04-18 15:12
参考下,如果数据彼此是用空格分开,下面程序能执行计算任务
#include
#include
#define N 4//定义每4个字节进行累加
void main()
{
FILE *fp;
//char temp[128];
//char tep_no[4];
int v,x[N],i=0,sum=0;
//memset(temp,'\0',sizeof(temp));
memset(x,0,sizeof(x));
if((fp=fopen("b.in","rb"))!=NULL)
{
//fread(temp,1,127,fp);
//strncpy(tep_no,temp,4);
//printf("%ld\n",*(long*)tep_no);
fscanf(fp,"%x",&v);//一次读入一个数值,利用数据之间是空格
while(!feof(fp))//没有到文件末尾
{
sum=0;//每次置sum为0
for(i=0;!feof(fp)&&i {
x[i]=v;//将数值取出
sum<<=8;//左移8位数,转换成高位
sum+=v;//加入地位
fscanf(fp,"%x",&v);
}
printf("%x\n",sum);//用十六进制显示累加和是否和文件信息匹配
//printf("%d\n",sum);//十进制显示
}
fclose(fp);
}
}
#include
#include
#define N 4//定义每4个字节进行累加
void main()
{
FILE *fp;
//char temp[128];
//char tep_no[4];
int v,x[N],i=0,sum=0;
//memset(temp,'\0',sizeof(temp));
memset(x,0,sizeof(x));
if((fp=fopen("b.in","rb"))!=NULL)
{
//fread(temp,1,127,fp);
//strncpy(tep_no,temp,4);
//printf("%ld\n",*(long*)tep_no);
fscanf(fp,"%x",&v);//一次读入一个数值,利用数据之间是空格
while(!feof(fp))//没有到文件末尾
{
sum=0;//每次置sum为0
for(i=0;!feof(fp)&&i
x[i]=v;//将数值取出
sum<<=8;//左移8位数,转换成高位
sum+=v;//加入地位
fscanf(fp,"%x",&v);
}
printf("%x\n",sum);//用十六进制显示累加和是否和文件信息匹配
//printf("%d\n",sum);//十进制显示
}
fclose(fp);
}
}
- 4楼网友:天凉才是好个秋
- 2021-04-18 14:21
程序在vs2010下编译通过,并可以运行。c++是兼容c的,绝大部分c语句可在c++里使用。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯