Java中如何將大整數轉換為以下字節數組形式:大整數被編碼為八位字節序列,采用二進制補碼表示法,以大端字節序傳輸。如果序列的長度不是八字節的倍數,那么大整數應該用最少數量的前導符號擴展字節填充,使長度成為八字節的倍數。這與KMIP 協議的第 9.1.1.4 節項目值有關
1 回答

嗶嗶one
TA貢獻1854條經驗 獲得超8個贊
據我所知,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;
}
首先,使用
toByteArray()
獲取一個字節數組計算數組長度的下一個八的倍數
如果這個數字與長度不相同,則需要填充
分配所需大小的數組
-1
負時用(符號擴展)填充填充(在另一種情況下它已經具有所需的零)復制原始字節
請注意,符號擴展填充數組仍然與BigInteger(byte[])
構造函數兼容,因此assert bigInt.equals(new BigInteger(array));
after 操作不應失敗。
添加回答
舉報
0/150
提交
取消