代码改变世界

java从c struct传来的字节数组中取值

2013-11-27 17:25  anjsoft  阅读(574)  评论(0编辑  收藏  举报

public int getInt(byte[] array,int index) {

  return (array[index]  & 0xff)  |

            (array[index + 1] & 0xff)<<8 |

            (array[index + 2] & 0xff)<<16 |

            array[index + 3] & 0xff<<24;

}

 

&0xff  相当与小0的数 加256 ,主要因为java byte 取值 -128-127 与 usign char 0- 255不同,所以要这样作

<< 8/16/24 主要是大小端的问题,根据实际情况改

public class Utils{
public static byte[] byteMerger(byte[] byte_1, byte[] byte_2){
byte[] byte_3 = new byte[byte_1.length+byte_2.length];
System.arraycopy(byte_1, 0, byte_3, 0, byte_1.length);
System.arraycopy(byte_2, 0, byte_3, byte_1.length, byte_2.length);
return byte_3;
}
public static int getInt(byte[] array, int index) {
return (
array[index] & 0xff)
| (array[index + 1] & 0xff) << 8
| (array[index + 2] & 0xff) << 16
| array[index + 3] & 0xff << 24;
}
public static void setInt(byte[] array,int index, int value) {
array[index] = (byte) value ;
array[index + 1] = (byte) (value >>> 8);
array[index + 2] = (byte) (value >>> 16);
array[index + 3] = (byte) (value >>> 24);
}
}