4

我相信在我的情况下完全转换为 BigInteger[] 将是最佳的。有人做过或发现这个用 Java 编写并愿意分享吗?

所以想象我有任意大小byte[] = {0xff,0x3e,0x12,0x45,0x1d,0x11,0x2a,0x80,0x81,0x45,0x1d,0x11,0x2a,0x80,0x81} 我如何将它转换为 BigInteger 的数组,然后能够安全地将它恢复回原始字节数组?

提前。

4

1 回答 1

7

使用BigInteger.toByteArray()BigInteger(byte[])

根据javadoc,后者...

将包含 BigInteger 的二进制补码表示的字节数组转换为 BigInteger。输入数组假定为大端字节序:最高有效字节位于第零个元素中。

如果您的字节表示不同,您可能需要应用一些额外的转换。

编辑- 如果您需要保留前导(即非重要)零,请执行以下操作:

  1. 从字节数组转换为 BigInteger 时,还要记下字节数组的大小。此信息未编码在 BigInteger 值中。

  2. 当您从 BigInteger 转换为字节数组时,将字节数组符号扩展为与原始字节数组相同的长度。

编辑 2 - 如果要将字节数组转换为 BigIntegers 数组,每个数组最多包含 N 个字节,则需要创建一个大小为 N 的临时数组,重复 1)用输入字节数组中的字节填充它(使用最后的左填充)和 2)使用上面的构造函数使用它来创建 BigInteger 值。也许 20 行代码?

但坦率地说,我很困惑你会(显然)N根据内存使用情况而不是根据你试图实现的数学算法来选择一个值。

于 2010-03-24T12:23:17.137 回答