为什么printf()在实际数据之前打印ffffff。 C [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么printf()在实际数据之前打印ffffff。 C [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

printf()函数打印领先的ffffff(从技术上讲,我理解最重要的位带有符号,所以它一直被带到数据开始的地方)。但是如何摆脱它们我不知道为什么会发生?

int mem_display(Cmd *cp, char *arguments)
{
  int i;
  char *adr;
  if (!sscanf(arguments,"%x",&adr))
  {
      return 0;
  }
  printf("%#0.8s ",arguments);

  for (i=0; i<16; i++) {
    printf("%02.x ",(unsigned int)*(adr+i));
  }
...

输出:

 % UNIX> md 10668 
/*calling function show memory location 0x10668*/
    OUT:
     10668 ffffffbc 10 20 ffffffe0 ffffffa0 40 ffffffa2 ffffffa0 44 ffffff9c 23 ffffffa0 20

解决了:

printf("%0.2x ",(unsigned int)*(adr+i));

输出:

UNIX> md 10000
 10000 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 .ELF............
答案

投射到unsigned char让系统认为*(adr+i)是无符号的,因此不会进行符号扩展。

for (i=0; i<16; i++) {
    printf("%02.x ",(unsigned char)*(adr+i));
}
另一答案

请阅读printf() manual,这是正确的方法

printf("%02x ", (unsigned char) adr[i]);

注意:请勿使用此*(a + i)表示法,特别是在施法时。取消引用指针并不是一种坏方法,它在这种特定情况下是不合适的。

以上是关于为什么printf()在实际数据之前打印ffffff。 C [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 printf 语句中的第一个值之前打印第二个值的原因是啥? [复制]

Printf 用于 c 中的浮点数

STM32为啥要用重定向printf来打印串口数据?直接用串口发送函数不行吗

pyspark:打印数据框时,为什么看不到实际值?我刚得到DataFrame [avg(Rate):double]

使用 printf 打印 UTF-8 字符串 - 宽与多字节字符串文字

为啥 printf 不在这里打印?