在接受此作为工作解决方案之后,Asker进行了一些进一步的优化。 我在 下面提供 了自己的 linked code 以供参考:
private static long toLong(byte[] value) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
final byte val = (byte) (value[0] < 0 ? 0xFF : 0);
for(int i = value.length; i < Long.BYTES; i++)
buffer.put(val);
buffer.put(value);
return buffer.getLong(0);
}
老年答案
编辑 :基于评论(更好地理解问题)
要使toLong函数同时处理负数和正数,请尝试以下操作:
private static long toLong(byte[] value)
{
long res = 0;
int tempInt = 0;
String tempStr = ""; //holds temp string Hex values
tempStr = bytesToHex(value);
if (value[0] < 0 )
{
tempInt = value.length;
for (int i=tempInt; i<8; i++) { tempStr = ("FF" + tempStr); }
res = Long.parseUnsignedLong(tempStr, 16);
}
else { res = Long.parseLong(tempStr, 16); }
return res;
}
以下是相关的bytesToHex函数(可重构为与任何byte[]输入一起使用,即开即用...)
public static String bytesToHex(byte[] bytes)
{ String tempStr = ""; tempStr = DatatypeConverter.printHexBinary(bytes); return tempStr; }