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

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

從 Java 中的字節數組創建一個 48 位有符號值

從 Java 中的字節數組創建一個 48 位有符號值

繁星coding 2023-01-05 17:11:21
我正在嘗試從字節數組中提取 6 個字節并將它們轉換為 48 位有符號整數值(即 Java 長整數)。如何做到這一點?編輯:例如,如果字節數組具有以下之一:byte[] minInt48 = new byte[] { (byte)0x80, 0, 0, 0, 0, 0 }; byte[] maxInt48 = new byte[] { (byte)0x7F, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF };如何將其解析為 Java 原語(即 Java long)以保留符號值?
查看完整描述

1 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

首先,您需要了解符號擴展。您需要將每個字節視為無符號值。


      long v = 0;

      byte q = -2; // unsigned value of 254

      v = v + q;

      System.out.println(v); // prints -2 which is not what you want.

      v = 0;

      v = v + (q & 0xFF); // mask off sign extension from q.

      System.out.println(v); // prints 254 which is correct.

這是一種方法。


     long val = 0;

     byte[] bytes = { -1, 12, 99, -121, -3, 123

     };

     for (int i = 0; i < bytes.length; i++) {

        // shift the val left by 8 bits first.

        // then add b.  You need to mask it with 0xFF to

        // eliminate sign extension to a long which will

        // result in an incorrect conversion.

        val = (val << 8) | ((i == 0 ? bytes[i]

              : bytes[i] & 0xFF));

     }

     System.out.println(val);


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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