簡體   English   中英

將Big Integer值轉換為8位字節(2s補碼大端)序列,這是Java中8的倍數

[英]Convert Big Integer value to eight bit bytes(2s complement big endian) sequence which is multiple of 8 in Java

如何在Java中將大整數轉換為以下字節數組形式:

大整數被編碼為8位字節的序列,以二進制補碼表示,傳輸大端。 如果序列的長度不是8個字節的倍數,則應使用最小數量的前導符號擴展字節填充大整數,以使長度為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)); 手術后永遠不會失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM