Vis*_*hnu 6 java biginteger data-conversion java-8 kmip
如何在Java 中将大整数转换为以下字节数组形式:
大整数被编码为8位字节的序列,以二进制补码表示,传输大端.如果序列的长度不是8个字节的倍数,则应使用最小数量的前导符号扩展字节填充大整数,以使长度为8个字节的倍数.
这与KMIP协议第9.1.1.4节项目值一致
据我所知,BigIntegerAPI 没有提供填充功能,所以你必须自己做填充:
对于a 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;
}
Run Code Online (Sandbox Code Playgroud)
toByteArray()获取字节数组-1在负数时填充(符号扩展名)填充(在另一种情况下已经具有所需的零)请注意,符号扩展填充数组仍然与BigInteger(byte[])构造函数兼容,因此assert bigInt.equals(new BigInteger(array));操作后应该永远不会失败.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |