62,615
社区成员
发帖
与我相关
我的任务
分享
for (int i = start, k = start + len % (Integer.SIZE / Byte.SIZE + 1); i < k; i++) {
//((i - start) % 4))亦可只写为(i - start)
tmp |= (data[i] & 0xff) << ((isBigEndian ? (k - i - 1)
: ((i - start) % 4)) * Byte.SIZE);
}
public class ByteUtil {
/**
* 将 Little-Endian 的字节数组转为 int 类型的数据<br />
* Little-Endian 表示高位字节在高位索引中
* @param bys 字节数组
* @param start 需要转换的开始索引位数
* @param len 需要转换的字节数量
* @return 指定开始位置和长度以 LE 方式表示的 int 数值
*/
public static int bytes2IntLE(byte[] bys, int start, int len) {
return bytes2Int(bys, start, len, false);
}
public static int bytes2IntLE(byte[] bys) {
return bytes2Int(bys, 0, bys.length, false);
}
/**
* 将 Big-Endian 的字节数组转为 int 类型的数据<br />
* Big-Endian 表示高位字节在低位索引中
* @param bys 字节数组
* @param start 需要转换的开始索引位数
* @param len 需要转换的字节数量
* @return 指定开始位置和长度以 BE 方式表示的 int 数值
*/
public static int bytes2IntBE(byte[] bys, int start, int len) {
return bytes2Int(bys, start, len, true);
}
public static int bytes2IntBE(byte[] bys) {
return bytes2Int(bys, 0, bys.length, true);
}
/**
* 将字节数组转为 Java 中的 int 数值
* @param bys 字节数组
* @param start 需要转换的起始索引点
* @param len 需要转换的字节长度
* @param isBigEndian 是否是 BE(true -- BE 序,false -- LE 序)
* @return
*/
private static int bytes2Int(byte[] bys, int start, int len,
boolean isBigEndian) {
int n = 0;
for(int i = start, k = start + len % (Integer.SIZE / Byte.SIZE + 1); i < k; i++) {
n |= (bys[i] & 0xff) << ((isBigEndian ? (k - i - 1) : i) * Byte.SIZE);
}
return n;
}
}
int sum = 0;
byte[] b={50,56,48,48};
for(int i = 0 ; i <4 ; i++){
int temp =((int)b[i])&0xff;
temp <<= i*8;
sum = temp + sum;
}
System.out.println(sum);
public static int byteToInt2(byte[] b) {
int mask=0xff;
int temp=0;
int n=0;
for(int i=0;i<4;i++){
n<<=8;
temp=b[i]&mask;
n|=temp;
}
return n;
}