在C语言中经常使用类型强转,以确保操作符“=”左右两侧数据类型匹配,
但在使用过程中需要确保强转的目标类型空间是否够存储完整的数据。
例如在int型强转为char,short型等字节长度较小的字符时,容易出现数据丢失问题。
#include <stdio.h>
unsigned int a = 0x11223344;
unsigned char b = 0;
unsigned short c = 0;
int main()
{
printf("a = 0x%0X\n", a);
b = (unsigned char)a;
printf("b = 0x%0X\n", b);
c = (unsigned short)a;
printf("c = 0x%0X\n", c);
return 0;
}
输出结果:
a = 0x11223344
b = 0x44
c = 0x3344
上面例子中,int在小端里面存储顺序按照地址由低到高依次为;
44 | 33 | 22 | 11 |
·在强转为char类型时:只取第一个字节“44”,故b = 0x44
·在强转为unsigned char时,只取前两个字节内容"44 33",故c = 0x3344
总结:
在大转小类型时,注意数据的取舍规则