现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

char的本质

2014-08-29 06:15 工业·编程 ⁄ 共 805字 ⁄ 字号 暂无评论

我们知道,在C/C++语言中,char 也是一种普通的scalable 类型,除了字长之外,它与short,int,long 这些类型没有本质区别,只不过被大家习惯用来表示字符和字符串而已。(或许当年该把这个类型叫做“byte”,然后现在就可以根据实际情况,使用byte 或short 来把char 通过typedef 定义出来,这样更合适些)于是,使用”%d”或者”%x”打印一个字符,便能得出它的10 进制或16 进制的ASCII 码值;反过来,使用”%c”打印一个整数,便可以看到它所对应的ASCII字符。以下程序段把所有可见字符的ASCII 码对照表打印到屏幕上(这里采用printf,注意”#”与”%X”合用时自动为16 进制数增加”0X”前缀):

for(int i = 32; i < 127; i++)

{

printf("[ %c ]: %3d 0x%#04X\n", i, i, i);

}

把占用字节小的类型赋给占用字节大的类型时,会有符号位扩展问题,比如把char赋给int时,应当区别是1扩展还是0扩展。

示例1.1

void f(unsigned char v)

{

    char c = v;

    unsigned char uc = v;

    unsigned int uia = c, uib = uc;

    int i1 = c, i2 = uc;

    printf("----------------\n");

    printf("%%c: %c, %c\n", c, uc);

    printf("%%X: %X, %X\n", c, uc);

    printf("%%u: %u, %u\n", uia, uib);

    printf("%%d: %d, %d\n", i1, i2);

}

    f(0x80);

    f(0x7F);

output:

%c: €, €

%X: FFFFFF80

%u: 42949671

%d: -128, 12

------------

%c: , 

%X: 7F, 7F

%u: 127, 127

%d: 127, 127

给我留言

留言无头像?