HEXIFY
实验目的
代码总览
#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 ;
}
代码分析
strtoul
函数
函数原型 :unsigned long strtoul(const char *nptr,char **endptr,int base )
函数功能 :参数nptr
字符串根据参数base
来转换成无符号的长整型数 。函数说明 :参数base
范围从2至36,或0。参数base代表采用的进制方式 ,如base值为10则采用10进制,若base值为16则采用16进制数等。当base值为0 时会根据情况选择用哪种进制:如果第一个字符是’0’,就判断第二字符,如果是‘x’则用16进制,否则用8进制;第一个字符不是‘0’,则用10进制。一开始strtoul()会扫描参数nptr
字符串,跳过前面的空格字符串,直到遇上数字或正负符号 才开始做转换,再遇到非数字或字符串结束时(’’)结束转换,并将结果返回。若参数endptr不为NULL ,则会将遇到不合条件而终止的nptr
中的字符指针由endptr
返回;若 endptr 为 NULL ,则表示该参数无效,或不使用该参数。返回值 :返回转换后的长整型数,否则返回ERANGE 并将错误代码存入errno 中。strtoul(argv[i], NULL, 16)
目的是为了将传入参数(十六进制表示)转换无符号长整型数。转载《strtoul函数的使用,揭开其神秘面纱》link
主函数
调用strtoul
函数将传入参数(十六进制表示)转换为无符号长整型,再强制转换为字符型输出。
编译运行
操作指令 ./a.out 30 31 32 33 34 35 36 37 38 39
运行结果
结果分析