x = ((int)x1<<24) + ((int)x2<<16) + ((int)x3<<8) + ((int)x4);
写成宏:
#define change(x1,x2,x3,x4) ((int)x1<<24) + ((int)x2<<16) + ((int)x3<<8) + ((int)x4)
调用:
x = change(x1,x2,x3,x4);关于错误,是在这里
int a = bytes[0]<<24+bytes[1]<<16+bytes[2]<<8+bytes[3];
+与<< 运算符会先算+
所以上面算式变成bytes[0]<<46<<38<<30
很显然经过这么多次左移
a肯定等于0
把算式里面每一项加个括号就可以了
int a = (bytes[0]<<24)+(bytes[1]<<16)+(bytes[2]<<8)+bytes[3];
————————
数字在计算机里面是以二进制存储的
比如22是00010110占四个字节空间,访问时地址只有一个,即首地址。
但由于是四个字节,所以实际上有四个地址,可以通过强制转换的方式,得到其他三个地址并单独取出其值。
比如
int a=0x12345678;
unsigned char p = (unsigned char )&a +1;
这样p就是第二个字节的值,按照小端存储,就是0x56
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)