所以我有一个非常大的指针p,指向大约40个字节。
我也知道这40个字节包含整数,字符和其他指针。我知道如何跳过这40个字节。
出于调试目的,我想打印出这些内容。我该怎么做?
例如,假设我知道在p + 16处有一个int,我想打印这个int。有没有办法“从这个地址打印4个字节并将其格式化为C?
”答案 0 :(得分:4)
是的,只是施放&解引用。假设您已设置p
:
int i = *(int *)(p + 16);
printf("%d\n", i);
注意潜在的对齐问题 - 例如,此代码:
int i = *(int *)(p + 3);
可能会在某些处理器上导致异常(假设p
已安全地与int
对齐,即)。在这种情况下,您需要自己组装字节。这是一个假设4字节整数和8位字节的例子。一定要注意字节顺序:
unsigned char *p;
int bigEndian = p[3] << 24 + p[4] << 16 + p[5] << 8 + p[6];
int littleEndian = p[3] + p[4] << 8 + p[5] << 16 + p[6] << 24;
答案 1 :(得分:3)
你可以这样做:
printf ("%d", *(int*)(p+16));
更好的方法可能是制作一个你想要打印的结构的结构,如果它是可以表达的东西。类似的东西:
typedef struct someStruct {
int field1;
float field2;
char field3[8];
int field4;
} someStruct;
然后你可以做这样的事情:
struct someStruct *p = (struct someStruct*)ptr;
printf ("%d", p->field4);