如何在 Java 中将大整数转换为以下字节数组形式:
大整数被编码为八位字节序列,采用二进制补码表示法,传输大端。如果序列的长度不是 8 个字节的倍数,那么 Big Integers 应该用最少数量的前导符号扩展字节填充,以使长度成为 8 个字节的倍数。
这要符合KMIP 协议,第 9.1.1.4 节项目值
据我所知,BigInteger
API 没有提供填充功能,因此您必须自己进行填充:
对于一个BigInteger bigInt
,使用
byte[] array = bigInt.toByteArray();
int len = array.length, len8 = len+7 & ~7;
if(len != len8) {
int pad = len8 - len;
byte[] nArray = new byte[len8];
if(bigInt.signum() < 0) Arrays.fill(nArray, 0, pad, (byte)-1);
System.arraycopy(array, 0, nArray, pad, len);
array = nArray;
}
toByteArray()
获取字节数组-1
负数时用(符号扩展)填充填充(在另一种情况下它已经具有所需的零)请注意,符号扩展填充数组仍然与BigInteger(byte[])
构造函数兼容,因此assert bigInt.equals(new BigInteger(array));
操作后的操作永远不会失败。