字符指针强制类型转换为int型指针

我们在该文中已经分析了,字符数组中可以存储整型的情况。在前文中,我们说,字符中存储的最大值是127,超过127,输出越限,字符为乱码,如下图所示

但是,当我们将字符指针强制转换成int*,然后再解引用*,得到的int值,就可以越限了

int main()
{
    char ch[4]={0xAA,0x11};
    printf("%d\n",*ch);
    printf("%d\n",*(uint8_t*)ch);//十进制
    printf("%x\n",*(uint8_t*)ch);//十六进制
    printf("%d\n",*(uint16_t*)ch);//十进制
    printf("%x\n",*(uint16_t*)ch);//十六进制
    return 0;
}

分析:

1)我们将ch字符强制转换类型为uint8_t*的类型,解引用后,获得的最大值为255了。 

2)我们将ch字符强制转换类型为uint16_t*的类型(指向两个字节类型的指针)后,解引用后,可以获得两个字节的数据,即将ch[0]和ch[1]的数据合并为一个unit16_t数据,因为是高地址存放的是高字节,低地址存放的是低字节,所以,ch[1](0x11)存放unit16_t的高位,ch[0](0xaa)存放unit16_t的低位。这其实是主机字节序方式。

注意:char数组存储的整型常量,转化为十进制unit16_t时,此整型常量为十六进制形式,如果是十进制的话,也需要先转换成十六进制再进行类型转换(因为实质是都要转换成二进制码)。

我们在下文中分析字符指针转换成int型指针的情况。

发布了100 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/modi000/article/details/105459962
今日推荐