学习日志之hexify.c的运行及解释

1.hexify.c 的代码展示
2.举例及解释
3.知识归纳

1.hexify.c代码如下

/* Convert sequence of hex digits on command line into a string, terminated by \n */
#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);//将argv[i]转化为十六进制数
	putchar((char) dig);
    }
    putchar('\n');
    return 0;
}

2.实例如下
输入参数:30 31 32 33 34 35 36 37 38 39

zoe@zoe-virtual-machine:/mnt/hgfs/Notepad++$ gcc hexify.c
zoe@zoe-virtual-machine:/mnt/hgfs/Notepad++$ ./a.out 30 31 32 33 34 35 36 37 38 39
0123456789

输出为:0123456789

程序将输入的十六进制数转化为无符号长整型,最后又强制转化为字符逐个输出,如30H为48,ASCII码为48所对应的字符是0。

3.知识点
函数unsigned long strtoul(const char *nptr,char **endptr,int base)
strtoul()会将参数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返回。

强制类型转换
例如要求整型变量m除以2得到的浮点数,我们使用m/2.0.或者使用(float)m/2对m进行强制类型转换,来确保除法运算结果的小数部分不会被截断。注意,不能将表达式(foat)m/2写成float(m)/2 或float(m/2)。写成(float)(m/2)虽然是合法的,但(float(m/2)是将 m/2整除的结果(已经舍去了小数位)强制转换为浮点数(相当于在其小数位添加了0),因此并不能真正得到m与2相除的小数部分。此外,强制类型转换运算(float)m只是一个含有强制转换运算符的表达式,表达式的结果是将m转换为浮点数后的结果,它并不能改变变量m的类型和数值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值