我有一个简单的问题。 代码非常简短,所以我只是在这里发布
#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);
但都不起作用。有人可以帮忙吗?谢谢!
答案 0 :(得分:7)
要以十六进制打印*q
的最低有效字节,您可以使用:
printf("%02x", *q & 0xFF);
这当然假设可以取消引用q
。
答案 1 :(得分:0)
首先转换为无符号:
unsigned char q = *(unsigned char *)(p);
printf("%02X", q);
(否则,如果您的char
已签名,则可变参数默认促销会将值转换为int
,结果可能为负数。)