java的int与字节数组互转

2016-07-10 / 4 阅读 / Java

int在java中占四个字节,所以转化为字节数组时应该是长度为4的数组。

例如下面一个正整数的二进制表达方式

 

因此主要的工作是把各个位置的数字转为字节。
方法一:
通过java提供的位运算符>> 和 &

            int a = 1;
            System.out.println("int=" + a);

            System.out.println("方法一:");
            byte[] bytes = new byte[4];

            bytes[0] = (byte) ((a >> 24) & 0xFF);
            bytes[1] = (byte) ((a >> 16) & 0xFF);
            bytes[2] = (byte) ((a >> 8) & 0xFF);
            bytes[3] = (byte) ((a) & 0xFF);

            System.out.println("数组内容:");
            for (byte aByte : bytes) {
                System.out.println(aByte);
            }

结果:

int=1
方法一:
数组内容:
0
0
0
1

 

方法二:
直接把对应8位的16进制字符转为byte

            int a = 1;
            System.out.println("int=" + a);

            System.out.println("方法二:");
            //转16进制字符
            String hexString = Integer.toHexString(a);
            while (hexString.length() < 8) {
                hexString = "0" + hexString;
            }
            System.out.println("16进制-->0x" + hexString);

            byte[] bytes = new byte[4];
            for (int i = 0; i < hexString.length(); i += 2) {
                bytes[i / 2] = (byte) Integer.parseInt(hexString.substring(i, i + 2), 16);
            }
            System.out.println("数组内容:");
            for (byte aByte : bytes) {
                System.out.println(aByte);
            }

结果:

int=1
方法二:
16进制-->0x00000001
数组内容:
0
0
0
1

byte[] 转为int的方法:

        int a = 666;
        System.out.println("原数值=" + a);
        byte[] bytes = new byte[4];
        bytes[0] = (byte) ((a >> 24) & 0xFF);
        bytes[1] = (byte) ((a >> 16) & 0xFF);
        bytes[2] = (byte) ((a >> 8) & 0xFF);
        bytes[3] = (byte) ((a) & 0xFF);

        //利用拼凑16进制字符-->转int
        char[] hexs = new char[]{'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < bytes.length; i++) {
            sb.append(hexs[bytes[i]>>4 & 0xf]);
            sb.append(hexs[bytes[i] & 0xf]);
        }

        int b = Integer.parseInt(sb.toString(), 16);
        System.out.println("转换结果="+b);

结果:

原数值=666
转换结果=666
相关推荐