【问题标题】:printf the last Byte of a hex value in Cprintf C 中十六进制值的最后一个字节
【发布时间】:2013-03-08 14:17:51
【问题描述】:

我有一个简单的问题。 代码真的很短,所以我把它贴在这里

#include <stdio.h>
int main(int argc, const char * argv[])
{

    long int p;

    printf("FYI: address of first local varaible of main() on the function stack:%p\n",&p);
    printf("Enter start address <hex notation> of dump:");
    scanf("%lx",&p);

    char * q;
    q = (char*)p;

    printf("%x\n",*q);

    return 0;
}

最后一个 printf 的结果,例如是 ffffffc8。如果我只想保留最后两个怎么办:c8.我怎样才能做到这一点?我试过: printf("%2x",*q);printf("%x",*q % 256); 但两者都不起作用。有人可以帮忙吗?谢谢!

【问题讨论】:

标签: c


【解决方案1】:

要以十六进制打印*q 的最低有效字节,您可以使用:

printf("%02x", *q & 0xFF);

这当然假设q 可以被取消引用。

【讨论】:

  • 谢谢你的作品。但是我想对这个 printf 使用一个 for 循环来获取多个地址。比如 printf("%2x",*(q++) & 0xFF);有时在内存中它是空的,结果为0。有没有办法让它也为00。这样我可以使打印结果非常整齐。(每个结果两个数字)。
  • @lancellx:我当前答案中的代码已经做到了(格式为"%02x"——注意0)。
【解决方案2】:

首先转换为无符号:

unsigned char q = *(unsigned char *)(p);
printf("%02X", q);

(否则,如果你的char是有符号的,可变参数默认提升会将值转换为int,结果可能为负。)

【讨论】:

  • 我没有尝试你回答,因为我必须使用指针。(学校作业..)谢谢大家。
  • @User1:嗯,我明白了。我想,一个争论的问题是,OP是指整数二进制表示的“最后两个”字符,还是整数的余数模256。我想,在这种情况下,她应该读到uintptr_t 并打印p % 0x100
猜你喜欢
  • 1970-01-01
  • 2011-10-28
  • 2015-12-09
  • 2017-01-09
  • 1970-01-01
  • 2017-09-13
  • 2017-06-17
  • 2021-04-10
相关资源
最近更新 更多