java – 将任意大小的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,后者……

Translates a byte array containing the two’s-complement binary representation of a BigInteger into a BigInteger. The input array is assumed to be in big-endian byte-order: the most significant byte is in the zeroth element.

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

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

>当您从字节数组转换为BigInteger时,还要记下字节数组的大小.此信息未在BigInteger值中编码.
>当您从BigInteger转换为字节数组时,将字节数组符号扩展为与原始字节数组相同的长度.

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

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

上一篇:JavaFX中的BigInteger属性是什么?


下一篇:c – 计算没有溢出的* a mod n