c/c++ 打开十六进制的文件 并以十进制输出

#include<stdio.h>#include<string.h>voidmain(){FILE*fp;chartemp[128];chartep_no[4];mem... #include <stdio.h>
#include <string.h>
void main()
{ FILE *fp;
char temp[128];
char tep_no[4];
memset(temp,'\0',sizeof(temp));
memset(tep_no,'\0',sizeof(tep_no));
fp=fopen("abc.DRM","rb");
fread(temp,1,127,fp);
strncpy(tep_no,temp,4);
printf("%ld\n",*(long*)tep_no);
fclose(fp);}
我有一个文件是用UE打开的,里面都是十六进制的数据 比如:23 D4 45 AE ……
我想将里面四个字节为一组作为输出,但是是以十进制的形式。但是编译结果总警告说fread的问题。还想问一下一个程序中又有c的常用语句也有c++的表达可以么。我上面的程序完全不对的话应该是什么。谢谢。希望大家真诚回答。
展开
 我来答
raidy_liu
推荐于2017-10-24 · TA获得超过915个赞
知道小有建树答主
回答量:153
采纳率:0%
帮助的人:185万
展开全部
你的程序从语法上没有问题,编译时应该没错误,但执行时,提示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
有钱买不起房子
2011-03-22 · TA获得超过4324个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2059万
展开全部
参考下,如果数据彼此是用空格分开,下面程序能执行计算任务
#include <stdio.h>
#include <string.h>
#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<N;i++)
{

x[i]=v;//将数值取出
sum<<=8;//左移8位数,转换成高位
sum+=v;//加入地位

fscanf(fp,"%x",&v);
}

printf("%x\n",sum);//用十六进制显示累加和是否和文件信息匹配
//printf("%d\n",sum);//十进制显示

}
fclose(fp);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
x88se
2011-03-22 · TA获得超过107个赞
知道答主
回答量:113
采纳率:100%
帮助的人:55.4万
展开全部
程序在vs2010下编译通过,并可以运行。c++是兼容c的,绝大部分c语句可在c++里使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
两萝I
2011-03-22
知道答主
回答量:18
采纳率:0%
帮助的人:8.2万
展开全部
vc6.0编译没出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
老百姓王大爷
2017-10-24 · TA获得超过624个赞
知道小有建树答主
回答量:655
采纳率:82%
帮助的人:137万
展开全部
你的程序从语法上没有问题,编译时应该没错误,但执行时,提示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对应的十进制数,原因是系统中数据是逆序的,即低字节在前,高字节在后。所以你要做换序处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式