将任意大小的byte 转换为BigInteger 然后安全地转换回完全相同的byte ,任何线索?

我认为完全转换为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,后者……

将包含BigInteger的二进制补码二进制表示的字节数组转换为BigInteger。 假设输入数组采用大端字节顺序:最重要的字节位于第0个元素中。

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

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

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

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

编辑2 – 如果你想将一个字节数组转换成一个BigIntegers数组,每个字节中最多有N个字节,你需要创建一个大小为N的临时数组,重复1)用输入字节数组中的字节填充它(用在末尾留下填充)和2)使用它来使用上面的构造函数创建BigInteger值。 也许20行代码?

但我坦率地说,你会(显然)根据内存使用而不是基于你想要实现的数学算法来选择N的值。