首页 > 解决方案 > 此函数如何打印给定参数的正确 HEX

问题描述

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

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

将指针投射到一块内存的地址有什么作用?

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));
}

以及如何,我的意思是整数如何存储到内存中,因为当我将它打印为 %d 时,例如 100 作为给定的 int。它将打印:

100 0 0 0

但是,当我使用 1000 时,它会打印:

232 3 0 0

标签: cmemory

解决方案


&x给出存储 x 的指针,因为 x 是一个 int,它给出一个指向 int(4 个字节)的指针。

(byte_pointer) &x而是给出指向 char (单个字节)的指针,以便 for 循环可以遍历 int 的每个单个字节(start[i]指向第 i 个字节而不是第 i 个 int)。


推荐阅读