铸造指针的算术
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
下面的代码将传递的字符串打印为十六进制值,我用它来检查在串行网络上传输之前包含不可打印字符的字符串。我理解代码,但不确定为什么如果我们假设我系统上的 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