数据

java中byte[ ]和各种数据类型的相互转换

2017-04-12  本文已影响84人  G桂

1. int 转 byte[ ]

    /**
     * 将int转为低字节在前,高字节在后的byte数组
     */
    public static byte[] intTobyte(int n) {
        byte[] b = new byte[4];// 为什么是4?因为java中int占4个字节,一个字节占8位,总共32位
        b[0] = (byte) (n & 0xff);      // 从右到左,取第1到第8位
        b[1] = (byte) (n >> 8 & 0xff); // 从右到左,取第9到16位
        b[2] = (byte) (n >> 16 & 0xff);// 从右到左,取第17到24位
        b[3] = (byte) (n >> 24 & 0xff);// 从右到左,取第25到32位
        return b;
    }

说明:

int a = 10000;// a的二进制为 10011100010000  
int b =  a & 0xff;// a和0xff 与运算后,b的二进制为 10000,即十进制的16  
System.out.println("b的十进制="+b);// 输出16
1. res = 20 >> 2;   
20的二进制为 0001 0100,右移2位后为 0000 0101,则结果就为 res = 5;  
      
2. res = -20 >> 2;  
-20的二进制为其正数的补码加1,即 11111111111111111111111111101100,  
右移2位后为 11111111111111111111111111111011,结果为 res = -5;
      
3. 而对于>>>符号而言:  
不管正负,都是右移后高位补0;  
res = 20 >>> 2; 的结果与 20>>2 相同;  
res = -20 >>> 2;  
-20的二进制为 1110 1011,右移2位,为111010 ,此时高位补0,即 0011 1010

所以 b[1] = (byte) (n >> 8 & 0xff); 表示 先右移8位,然后取最低的八位。
也即从右到左,取第9到16位

2. short和byte[]的转换

上一篇 下一篇

猜你喜欢

热点阅读