C/C++ printf 输入16进制文本数据 多出许多ffffff的问题

问题描述:在编程过程中遇见一需求,需要从一文件中读取16进制格式的数据(格式如下图1所示),存储在内存中(char buf [MAX_SIZE])。然而,在测试读取的数据时,用printf("%02x",buf);输出数据时,出现了一个怪异的问题:凡是每个字节的高4位的值大于8,这个字节输出值前面就会唐突的冒充多个ffffff(结果见图2)。


图1 输入文件中的数据格式


 图2 输出数据格式    

对比图1 与图2 可以发现,针对每个字节,凡是高4位值大于8的,前面都会多出数个f.

我的输出代码如下:

	int rsize;
	char buf[MAX_SIZE];        //问题的始作俑者*****
	rsize = fread(buf,sizeof(char),filesize,fp);
	if (rsize < 0)
	{
		printf("Failed to read file .\n");
	}

	buf[rsize] = '\0';

        int i ;
        for ( i = 0; i < rsize; ++i)
        {
    	  if ((i%16) == 0 )
    	  {
    		printf("\n");
    	  }

    	  printf("%02x ",buf[i]);
      }

造成这种显现的原因是什么呢?use printf to print character string in hex format, distorted results   这里有讨论,归根芥蒂,就是printf("%02x",buf);输出时,溢出了。如果将存放数据的buf改为,unsigned char buf[MAX_SIZE)问题就能解决。



  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值