美文网首页数据
java中byte[ ]和各种数据类型的相互转换

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

作者: G桂 | 来源:发表于2017-04-12 21:05 被阅读84次

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;
    }

说明:

  • & 0xff (与运算):
    1. 两个bit(1或0)进行与运算时,如果两者都为1,结果为1,否则为0,
    2. 而0xff转化为2进制为:0000000011111111,
    3. 当一个int和 0xff进行与运算时,即表示提取这个int的最低八位
      例如:
int a = 10000;// a的二进制为 10011100010000  
int b =  a & 0xff;// a和0xff 与运算后,b的二进制为 10000,即十进制的16  
System.out.println("b的十进制="+b);// 输出16
  • n >> 8(位运算):
    >>8表示右移8位,如果该数为正,则高位补0,若为负数,则高位补1;

    例如:

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[]的转换

相关文章

网友评论

    本文标题:java中byte[ ]和各种数据类型的相互转换

    本文链接:https://www.haomeiwen.com/subject/nchvattx.html