亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

狐的傳說 2021-12-01 16:12:10
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 操作不應失敗。


查看完整回答
反對 回復 2021-12-01
  • 1 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號