问题描述:在编程过程中遇见一需求,需要从一文件中读取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)问题就能解决。