C 此函数如何打印给定参数的正确十六进制

C 此函数如何打印给定参数的正确十六进制,c,memory,C,Memory,在我阅读CS:APP第三版的时候,我偶然发现了这段代码,谁知道在阅读这本书时,我可能会得到一个正确的解释,但直到现在我还不太明白这是如何检索正确的十六进制数的 我希望这里有人能给我一个彻底的解释 将指针投射到一段内存的地址会做什么 typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start, size_t len) { int i; for (i = 0; i < len; i++)

在我阅读CS:APP第三版的时候,我偶然发现了这段代码,谁知道在阅读这本书时,我可能会得到一个正确的解释,但直到现在我还不太明白这是如何检索正确的十六进制数的

我希望这里有人能给我一个彻底的解释

将指针投射到一段内存的地址会做什么

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, size_t len)
{
    int i;
    for (i = 0; i < len; i++)
        printf(" %.2x", start[i]);
    printf("\n");
    }

void show_int(int x)
{
    show_bytes((byte_pointer) &x, sizeof(int));
}
但是,当我使用1000时,它将打印:

100 0 0 0
232 3 0 0
&x给出了存储x的指针,因为x是int,所以它给出了指向int 4字节的指针


byte_pointer&x为指向字符的指针提供了一个字节,这样for循环可以遍历int start的每个字节[i]指向第i个字节,而不是第i个int。

它将每个数组元素打印为格式为%.2x的两位十六进制数。您可以看到它也使用大写字母写成%02x或%02x,前面有空格。您还可以将其打印为:

while (len--) printf(" %02x", start++);

一个更紧凑和难以理解的方式,新手,

你查看了PrTrF的格式说明符吗?@好奇的递归思想,而相关信息在这个例子中可能是相同的,最好不要推荐C++函数的C引用。可能有细微的差别。3 x 256+232=1000 CS:APP第三版到底是什么?以前的版本怎么了?从那以后又编辑了一部吗?求你了,不要用斜线。如果我这样评论怎么办?这是一部3d电影吗?什么?HBAOET。。。