无法控制值为0xff的char型变量输出宽度的解决方法

3245阅读 5评论2011-09-20 ws00871112
分类:LINUX

今天写了一个转换点分十进制的IP地址为对应十六进制数的小程序,遇到下面的问题:
 35     h1 = (char)(ip_in_int->s_addr >> 24);
 36     h2 = (char)(ip_in_int->s_addr >> 16);
 37     h3 = (char)(ip_in_int->s_addr >> 8);
 38     h4 = (char)(ip_in_int->s_addr);
 39 
 40     printf("The hex form of the ip address is : 0x%02x%02x%02x%02x \n", h4, h3, h2, h1);
 
在解析255.255.255.255的时候,并不是输出0xffffffff,而是:0xffffffffffffffffffffffffffffffff;
看来,对于char型变量,如果值为全1,用上述方法打印时,宽度控制是不起作用的。解决方法如下:
#include
 35     h1 = (uint8_t)(ip_in_int->s_addr >> 24);
 36     h2 = (uint8_t)(ip_in_int->s_addr >> 16);
 37     h3 = (uint8_t)(ip_in_int->s_addr >> 8);
 38     h4 = (uint8_t)(ip_in_int->s_addr);
 39 
 40     printf("The hex form of the ip address is : 0x%02x%02x%02x%02x \n", h4, h3, h2, h1);
 41     return 0;

将char 型变量转化为uint8_t 就能正确的输出了。
上一篇:内核新手区之源码编译
下一篇:亚马逊EBS

文章评论