c - 如何在大指针中打印字节子集?

标签 c pointers

所以我有一个非常大的指针 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);

可能会导致某些处理器出现异常(假设 pint 安全对齐,即)。在这种情况下,您需要自己组装字节。这是一个假设 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/

相关文章:

c - 我应该如何在函数中传递结构?

c - 取消引用双指针以传递给递归函数

c++ - gdb中链接命令观察执行栈

c - 如何在 C 中的两个子字符串之间找到第 n 个子字符串?

c - 分配结构堆与堆栈 : Pthread_create

在 C 中将 ascii char[] 转换为十六进制 char[]

c - 输出返回为 0.00

c++ - C++ 中的列表数组。指针;/

c - 我需要/可以在 C 中释放一个空指针吗?

c - 链接错误浮点格式未链接