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

时间:2010-03-24 12:15:14

标签: java algorithm byte biginteger

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

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

事先提前。

1 个答案:

答案 0 :(得分:7)

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

根据javadoc,后者......

  

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

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

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

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

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

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

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