java byte 变长_java - 可变长度到数字的字节数组 - 堆栈内存溢出

在接受此作为工作解决方案之后,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; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值