下面的代码将传递的字符串打印为十六进制值,我用它来检查在串行网络上传输之前包含不可打印字符的字符串。我理解代码,但我不确定为什么如果我们假设我的系统上的int
是4个字节,则每次循环计算(unsigned int) *s++
时指针不会前进4个字节。有人可以解释为什么会这样吗?是否存在某种类似于算术运算符的运算符预测值?
static void printhexstring(const char *s) {
while(*s) {
printf("<%02X> ", (unsigned int) *s++);
}
printf("\n");
}
答案 0 :(得分:0)
printf("<%02X> ", (unsigned int) *s++);
您正在递增s
类型的指针char
,当此增量完成时,指针s
将移动一个字节而不是4个字节。
这里的转换对指针算术没有影响。
%X
将unsigned int转换为unsigned hexa并显示值,以便您拥有强制转换unsigned int