我认为完全转换为BigInteger []在我的情况下是最佳的。有人用Java编写并发现这个并愿意分享吗?
想象一下,我有任意大小byte[] = {0xff,0x3e,0x12,0x45,0x1d,0x11,0x2a,0x80,0x81,0x45,0x1d,0x11,0x2a,0x80,0x81}
如何将其转换为BigInteger数组,然后能够安全地将其恢复回原始字节数组?
答案 0 :(得分:7)
使用BigInteger.toByteArray()和BigInteger(byte[])。
根据javadoc,后者......
将包含BigInteger的二进制补码二进制表示的字节数组转换为BigInteger。假设输入数组采用大端字节顺序:最重要的字节位于第0个元素中。
如果您的逐字节表示不同,则可能需要应用一些额外的转换。
编辑 - 如果您需要保留前导(即非重要)零,请执行以下操作:
当您从字节数组转换为BigInteger时,还要记下字节数组的大小。此信息不以BigInteger值编码。
当您从BigInteger转换为字节数组时,将字节数组符号扩展为与原始字节数组相同的长度。
编辑2 - 如果要将字节数组转换为BigIntegers数组,每个字节数最多N个字节,则需要创建一个大小为N的临时数组,重复1)填充它来自输入字节数组的字节(末尾有左边填充)和2)使用它来使用上面的构造函数创建BigInteger值。也许20行代码?
但我坦率地说,你会(显然)根据内存使用而不是基于你想要实现的数学算法来选择N
的值。