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

Pat*_*aDJ 4 java algorithm byte biginteger

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

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

ty提前.

Ste*_*n C 7

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

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

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

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

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

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

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

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

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

  • 那么转换应该如何知道要加载到每个BigInteger中的字节数? (2认同)