C 此函数如何打印给定参数的正确十六进制
在我阅读CS:APP第三版的时候,我偶然发现了这段代码,谁知道在阅读这本书时,我可能会得到一个正确的解释,但直到现在我还不太明白这是如何检索正确的十六进制数的 我希望这里有人能给我一个彻底的解释 将指针投射到一段内存的地址会做什么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++)
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。。。