随笔 - 51, 文章 - 1, 评论 - 41, 引用 - 0
数据加载中……

printf(“0x02x”,data[i])的问题

遇到如下代码:

#include <stdio.h>
int main() {
    const char data[] = {0x12, 0x80, 0x40};
    int i;
   
    for (i=0; i<sizeof(data)/sizeof(data[0]); ++i) {
        printf("%02X, ", data[i]);
    }
    return 0;
}

输出结果为:12, FFFFFF80, 40,

期望结果应该是:12, 80, 40,

虽然知道是无符号有符号整型类型提升的问题,但也花了不少时间理顺其逻辑。

1. 首先printf的可变参数期望是int型,因此data[i]会提示至int。

2. data[i]为char型,提升时会带符号,0x80表示-128,而int型表示为0xFFFFFF80。

3. %02X表示长度小于2用0填充,而不是截断为长度2。

问题的根源在于data的定义不严谨,应该定义为unsigned char。

posted on 2014-06-18 22:25 lemene 阅读(962) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理