c - 此函数如何打印给定参数的正确 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
解决方案
&x
给出存储 x 的指针,因为 x 是一个 int,它给出一个指向 int(4 个字节)的指针。
(byte_pointer) &x
而是给出指向 char (单个字节)的指针,以便 for 循环可以遍历 int 的每个单个字节(start[i]
指向第 i 个字节而不是第 i 个 int)。
推荐阅读
- javascript - 如何使用鼠标中轮按钮拖动 Openseadragon 画布
- excel - 在每个 IF 语句中的真值或假值的 excel 中嵌套 IF 时遇到问题
- amazon-web-services - 如何使用 aws cloudwatch get-metric-widget-image?
- ios - 在 WebView ios 中下载图像
- python - 在表中插入总行数,不使用 Pandas,但仅使用循环
- django - 基于类的视图中的 django 授权
- php - PHP - 正则表达式获取以字符分隔的整数值
- javascript - HTML标签的反应/酶测试值?
- python - 寻找卡迈克尔数
- office365 - 如何为不受支持的电子邮件禁用 office.js 插件,例如(交付失败)