加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 请解释一下为什么24,16,8用于将int转换为字节?

发布时间:2020-12-15 04:09:23 所属栏目:Java 来源:网络整理
导读:以下代码是将int转换为Bytes数组. ?我知道int i右移24,16,8次,ANDED用0xFF但是我无法理解为什么这些数字被使用了? private static byte[] intToBytes(int i) // split integer i into 4 byte array { // map the parts of the integer to a byte array byte
以下代码是将int转换为Bytes数组.
?我知道int i右移24,16,8次,ANDED用0xFF但是我无法理解为什么这些数字被使用了?

private static byte[] intToBytes(int i)
  // split integer i into 4 byte array
  {
    // map the parts of the integer to a byte array
    byte[] integerBs = new byte[4];
    integerBs[0] = (byte) ((i >>> 24) & 0xFF);
    integerBs[1] = (byte) ((i >>> 16) & 0xFF);
    integerBs[2] = (byte) ((i >>> 8) & 0xFF);
    integerBs[3] = (byte) (i & 0xFF);

    // for (int j=0; j < integerBs.length; j++)
    //  System.out.println(" integerBs[ " + j + "]: " + integerBs[j]);

    return integerBs;
  }  // end of intToBytes()

解决方法

好吧,假装你有一个32位的二进制数:

00001111 00000111 00000011 00000001

一个字节相当于8位,因此上面的数字由4个字节组成.

为了将这些字节分开,我们需要执行一系列移位和掩码操作.

例如,要获取第一个字节(00001111),我们执行以下操作:

00001111 00000111 00000011 00000001 (original)
00000000 00000000 00000000 00001111 (shifted 24 spaces to the right)

现在我们不希望这3个字节的零位于前面,所以我们使用8位掩码(0xFF)并在我们的32位结果数和掩码之间执行AND运算.

例如:

00000000 00000000 00000000 00001111
&&                         22222111
-----------------------------------
                           00001111 (the first byte)

现在你可以想象如何获得第二个字节(只向右移16位).整个目的是在前8个位置获得你想要的8位并使用掩码来摆脱前方的垃圾.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读