我在java中编写代码,从字节数组转换为long,代码在这里:
public static long bTol(byte[] b_arr) {
long res = 0;
for (int i = 0; i < b_arr.length; i++) {
res += ((b_arr[i] & 0xFFFFFFFFFFFFFFFFL) << ((b_arr.length - 1 - i) * 8));
}
return res;
}
当我运行此代码时,我获得了不同的数字,但我无法理解什么是问题
答案 0 :(得分:0)
您必须屏蔽单个字节,否则符号扩展会污染您的结果:
public static long bTol(byte[] b_arr) {
long res = 0;
for (int i = 0; i < b_arr.length; i++) {
res += (long)(b_arr[i] & 0xFF) << ((b_arr.length - 1 - i) * 8);
}
return res;
}
您也可以使用可用的方法(假设字节数组的长度为8,应该如此):
public static long bToL(byte[] b_arr) {
ByteBuffer buf = ByteBuffer.allocate( b_arr.length );
buf.put( b_arr );
return buf.getLong(0);
}
答案 1 :(得分:0)
尝试替换
res += ((b_arr[i] & 0xFFFFFFFFFFFFFFFFL) << ((b_arr.length - 1 - i) * 8));
由此:
res += ((long) b_arr[i] & 0xFFL) << (8 * i);