美文网首页数据
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