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位并使用掩码来摆脱前方的垃圾. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |