C语言字节与整形之间变换,求怎样做的

C语言字节与整形之间变换,求怎样做的,第1张

从高字节到低字节,依次输入(即:x1->x2->x3->x4)
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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13396080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存