C++从文件里边读数据转为HEX问题,

voidreadfile(){FILE*fp;charb[50];fp=fopen("c:\\1.dcm","r");fscanf(fp,"%s",b);inta=0;f... void readfile(){ FILE *fp; char b[50]; fp = fopen("c:\\1.dcm", "r");fscanf(fp,"%s",b);int a=0;for(a=0;a<=49;a++){ printf("%x\n",b[a]);}getchar();}
读到8H的时候,显示错码fffff2,而且超过2DH以后全部显示错码FFFFFCC,不管你数组开了多大,这是为什么?谢谢
展开
 我来答
金色潜鸟
2013-07-09 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5575万
展开全部
int c,n=1;
fp = fopen("c:\\1.dcm", "rb"); // 用2进制方法打开文件
while(1)
{
c = fgetc(fp); // 读1个字符
if ( feof(fp)) break; // 结束条件
printf("%02x ",c); // 输出
if (n%50==0) printf("\n"); //输出换行控制
n++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GodHlpMe
2013-07-09 · TA获得超过8455个赞
知道大有可为答主
回答量:4600
采纳率:46%
帮助的人:970万
展开全部
对printf 的使用许多人认识不够,包括教材。
printf 中的格式串 必须 与后面的参数类型一致,编译时无法做到是否一致的检查,
而执行时,printf 只按格式串中的类型对后面的参数进行处理,当这两类型不
一致时,并不对参数进行转换,所以就会出现奇怪的错误了。
如 %x 是按四个字节的整数进行16进显示,而实际你的是 字符类型,printf仍把
这字符的地址当成整数地址处理,所以,结果是奇怪的,随机的。只要对后果的类型
强制一下就可以了。
printf("%2x\n", (int) (unsigned char)b[a]);
再试试。
追问
的确,按你的改好了很多,但是第2个问题也就是超过2DH以后全部显示错码FFFFFCC,不管你数组开了多大,没有解决,再帮想想 谢谢
追答
fscanf  的使用不合理,你不是文本文件,
而fscanf 会重新解释读到的随机字符,如 8H就是退格的含义,
会引起新的问题。
你用 fread 吧,这不会出现这个问题。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式