#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int i;
for (i = 1; i < argc; i++) {
unsigned long dig = strtoul(argv[i], NULL, 16);
putchar((char) dig);
}
putchar('\n');
return 0;
}
在CSAPP学习见到以上这段代码时,起初不懂什么意思,便百度了以下strtoul()这个函数,发现解释不是很懂,便自己经过在Linux上疯狂运行,得出了以下的粗略结论:
strtoul()的第一个参数是将要转化的字符,第二个参数默认写NULL,第三个参数是将这个字符当做什么进制来看,若是写0,一般当十进制来看,并且这个参数是有范围的。比如:
hxl@hxl-virtual-machine:~/桌面/task/code$ gcc -o h hexify.c
hxl@hxl-virtual-machine:~/桌面/task/code$ ./h 29
)
当输入29时,把29看做16进制,转化为十进制为41,再然后经过(char)dig 的转化为char型,再输出,而41对应的ASCII码为)。