以下代码是将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()
Run Code Online (Sandbox Code Playgroud)
好吧,假装你有一个32位的二进制数:
00001111 00000111 00000011 00000001
Run Code Online (Sandbox Code Playgroud)
一个字节相当于8位,因此上面的数字由4个字节组成.
为了将这些字节分开,我们需要执行一系列移位和掩码操作.
例如,要获取第一个字节,(00001111)我们执行以下操作:
00001111 00000111 00000011 00000001 (original)
00000000 00000000 00000000 00001111 (shifted 24 spaces to the right)
Run Code Online (Sandbox Code Playgroud)
现在我们不希望这3个字节的零位于前面,所以我们使用8位掩码(0xFF)并AND在32 bit结果数和掩码之间执行操作.
例如:
00000000 00000000 00000000 00001111
&& 11111111
-----------------------------------
00001111 (the first byte)
Run Code Online (Sandbox Code Playgroud)
现在你可以想象如何获得第二个字节(只向右移16位).整个目的是在前8个位置获得你想要的8位并使用掩码来摆脱前方的垃圾.
| 归档时间: |
|
| 查看次数: |
2436 次 |
| 最近记录: |