所以我有一个非常大的指针 p,指向大约 40 个字节。
我也知道这 40 个字节包含 ints、chars 和其他指针。我也知道如何跳过这 40 个字节。
出于调试目的,我想打印出这些内容。我该怎么做?
例如,假设我知道在 p+16 处有一个 int,我想打印这个 int。有没有办法在 C 语言中“从此地址打印 4 个字节并将其格式化为 int”?
最佳答案
是的,只是转换和取消引用。假设您已经设置了 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;
关于c - 如何在大指针中打印字节子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658193/