2

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

#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); 都不管用。有人可以帮忙吗?谢谢!

4

2 回答 2

7

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

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

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

于 2013-03-08T14:20:28.257 回答
0

首先转换为无符号:

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

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

于 2013-03-08T14:21:19.710 回答