java只支持有符号整数,所以当一个byte类型的整数转换为长精度整数类型时,高字节会填充符号位的值。如果该byte类型的整数表示一个无符号整数时,必须要将填充的高字节清零才能得到对应的值。否则如果最高位是1的话,就会得到一个负值。
/**
* 该函数用于将一个byte数组的某个或某几个元素转换为int类型的整数。
*
* @param buf
* @param offset
* @param size 字节个数,取值范围:1-4.
* @return int
* */
private static int getBigEndianInt(byte[] buf, int offset, int size) {
int ret = 0;
for (int i = 0; i < size; i++) {
ret = ret << 8;
ret |= buf[offset + i] & 0xFF;
}
return ret;
}