我先将一个int32数字转换为char [4]数组,然后通过(int *)将数组转换回int32,但是数字与之前不同:
unsigned int num = 2130706432;
unsigned int x;
unsigned char a[4];
a[0] = (num>>24) & 0xFF;
a[1] = (num>>16) & 0xFF;
a[2] = (num>>8) & 0xFF;
a[3] = num & 0xFF;
x = *(int *)a;
printf("%d\n", x);
输出结果为127。如果我将num设置为127,则输出结果为2130706432。有人有想法吗?
x = *(int *)a;
违反了严格别名规则(启用警告后尝试编译),在现代C中,您应该使用联合来进行类型转换(但最好通过位移来完成)。请参见http://stackoverflow.com/questions/8143857/bad-value-affectation-after-type-casting/8159802#8159802。 - ninjaljunsigned int x; unsigned char * a = (unsigned char*)(&x);
- Kerrek SB