我认为完全转换为BigInteger []在我的情况下是最佳的.有没有人用Java编写并发现这个并愿意分享?
所以想象我有任意大小byte [] = {0xff,0x3e,0x12,0x45,0x1d,0x11,0x2a,0x80,0x81,0x45,0x1d,0x11,0x2a,0x80,0x81}
如何将其转换为BigInteger的数组,然后能够安全地将其恢复回原始字节数组?
ty提前.
解决方法:
使用BigInteger.toByteArray()和BigInteger(byte[]).
根据javadoc,后者……
Translates a byte array containing the two’s-complement binary representation of a BigInteger into a BigInteger. The input array is assumed to be in big-endian byte-order: the most significant byte is in the zeroth element.
如果您的逐字节表示不同,则可能需要应用一些额外的转换.
编辑 – 如果您需要保留前导(即非重要)零,请执行以下操作:
>当您从字节数组转换为BigInteger时,还要记下字节数组的大小.此信息未在BigInteger值中编码.
>当您从BigInteger转换为字节数组时,将字节数组符号扩展为与原始字节数组相同的长度.
编辑2 – 如果你想将一个字节数组转换成一个BigIntegers数组,每个字节中最多N个字节,你需要创建一个大小为N的临时数组,重复1)用输入字节数组中的字节填充它(用在末尾留下填充)和2)使用它来使用上面的构造函数创建BigInteger值.也许20行代码?
但我坦率地说,你会(显然)基于内存使用而不是基于你试图实现的数学算法来选择N的值.