4byte合成一个Int
比如有一个Byte数组,R_buff[1]~R_buff[4].
我要把他们合成一个有符号的int型:t_Load
我用的是:
t_Load = R_buff[1] << 24 + R_buff[2] << 16 + R_buff[3] << 8 + R_buff[4];
.
结果出来的数是错的。。。
------解决方案--------------------t_Load = (R_buff[1] << 24) + (R_buff[2] << 16) + (R_buff[3] << 8) + R_buff[4];
------解决方案--------------------出错是因为可能由正直变成负值
比如R_buff[1]为255,二进制表示为1111 1111,左移24位就是0xFF 00 00 00,而计算机里是用补码表示的,这个数就变成了负数,因为符号位为1,那么这个数实际上是-16777216,这样就达不到LZ要的效果了。
不如直接计算好了
t_Load=R_buffer[1]*0x1000000+R_buffer[2]*0x10000+R_buffer[3]*0x100+R_buffer[4];
------解决方案--------------------
准确的说是网络字节序,也就是常说的大端模式
在Windows中,本地数据都是小端模式的
那你试下这样int i = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt32(R_buff, 1));