铸造指针的算术

Arithmetic on Casted Pointer

下面的代码将传递的字符串打印为十六进制值,我用它来检查在串行网络上传输之前包含不可打印字符的字符串。我理解代码,但不确定为什么如果我们假设我系统上的 int 是 4 个字节,每次循环计算 (unsigned int) *s++ 时指针不会前进四个字节。有人可以解释为什么会这样吗?是否有某种像一般算术一样的运算符优先级?

static void printhexstring(const char *s) {
while(*s) {
    printf("<%02X> ", (unsigned int) *s++);
}
printf("\n");
}
printf("<%02X> ", (unsigned int) *s++);

您正在递增类型为 char 的指针 s,当递增完成后,指针 s 将移动一个字节而不是 4 个字节。 转换对此处的指针运算没有影响。

%X 将 unsigned int 转换为 unsigned hexa 并显示值,这样你就可以进行转换 unsigned int