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)问题就能解决。



猜你喜欢

转载自blog.csdn.net/zdsx1104/article/details/34405693
今日推荐