Java中用字节数组表示整数和用整数表示字节数组

简介: 程序中的所有数在计算机内存中都是以二进制的形式储存的。所以有时候我们还是有必要学习一下位运算的。我们知道在java中一个整型是占用四个字节32位的,而一 个byte类型占用一个字节8位的。所以我们可以用一个整型来最多表示一个长度为4的byte数组,同样我们可以用一个长度为4的byte数组来表示一个整型。下面我们就 看一下怎么用代码怎么去写整型和byte数组的相互转换。 字节数组表示一

程序中的所有数在计算机内存中都是以二进制的形式储存的。所以有时候我们还是有必要学习一下位运算的。我们知道在java中一个整型是占用四个字节32位的,而一

byte类型占用一个字节8位的。所以我们可以用一个整型来最多表示一个长度为4的byte数组,同样我们可以用一个长度为4的byte数组来表示一个整型。下面我们就

看一下怎么用代码怎么去写整型和byte数组的相互转换。

字节数组表示一个整型

    /**
     * 用一个长度为4的数组表示一个整数
     * 因为java中一个int类型占4个字节即八位,而一个byte类型占1个字节
     * 所以如果用byte表示一个整数的话,需要一个长度为4的byte数组。
     * 注意这里要用无符号右移
     * @param bytes
     * @param temp
     */
    public void putInt(byte[] bytes, int temp) {
        bytes[0] = (byte)(temp >>> 24) ;//bytes[0]表示一个int值的最高8位
        bytes[1] = (byte)(temp >>> 16);//bytes[1]表示一个int值的接下来的8位
        bytes[2] = (byte)(temp >>> 8);//bytes[2]表示一个int值的再接下来的8位
        bytes[3] = (byte)(temp);      //bytes[3]表示一个int值的最低8位
    }
    /**
     * 把一个长度为4的byte数组还原为整数
     * 注意这里一定要明确的区分开来一个int值的四个字节。
     * 每个字节之间一定要用括号()括起来
     * @param bytes
     * @return
     */
    public int getInt(byte[] bytes) {
        return (bytes[0] << 24)           | //还原int值最高8位
                ((bytes[1] & 0xff) << 16) | //还原int值接下来的8位
                ((bytes[2] & 0xff) << 8 ) |//还原int值再接下来的8位
                (bytes[3] & 0xff);         //还原int值的最低8位
    }
接下来我们测试一下看看:
    @Test
    public void byteTransformationInt(){

        int temp = 579;
        byte[] bytes = new byte[4];
        putInt(bytes,temp);//用一个长度为4的数组表示一个整型
        System.out.println(getInt(bytes));//从长度为4的数组中还原放入的整型
    }

测试的输出结果和我们放入的整型值一模一样。

用整型表示一个长度为4的byte数组

    /**
     * 这里可以根据自己的需要改变byte数组的长度,
     * 这里我用的是一个长度为4的字节数组
     * @return
     */
    public int putBytes(byte[] bytes){
        return (bytes[0] & 0xff) |
                ((bytes[1] & 0xff) << 8) |
                ((bytes[2] & 0xff) << 16) |
                ((bytes[3] & 0xff) << 24);
    }

    /**
     * 从整型转换字节数组
     * @param a
     * @return
     */
    public byte[] getBytes(int a){

        byte[] bytes = new byte[4];
        bytes[0] = (byte)(a);
        bytes[1] = (byte)(a >>> 8);
        bytes[2] = (byte)(a >>> 16);
        bytes[3] = (byte)(a >>> 24);
        return bytes;
    }
接下来我们来测试一下:

    @Test
    public void testIntToBytes(){

        byte[] bytes = new byte[]{14,78,12,-12};
        int tmp = putBytes(bytes);
        byte[] bytes1 = getBytes(tmp);
        System.out.println(Arrays.toString(bytes1));
    }
我们看看测试结果:



输出结果和我们要转换的字节数组一样。

相关文章
|
1月前
|
Java
Java中整数(负数)的二进制表示
Java中整数(负数)的二进制表示
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
23 0
|
1月前
|
算法 Java 开发者
Java:求正整数分解为质因数Java
Java:求正整数分解为质因数Java
|
1月前
|
Java
Java 中表示整数的包装类Integer(详解)
Java 中表示整数的包装类Integer(详解)
|
2月前
|
Java
Java字符串转整数的超简单方法!
Java字符串转整数的超简单方法!
32 0
|
2月前
|
Java
LeetCode-整数转罗马数字=Java
整数转罗马数字=Java题解
12 0
|
2月前
|
Java 测试技术
java字符串练习题5、罗马数字转整数
java字符串练习题5、罗马数字转整数
25 0
|
3月前
|
Java Go C++
Golang每日一练(leetDay0085) 2的幂、数字 1 的个数
Golang每日一练(leetDay0085) 2的幂、数字 1 的个数
24 0
Golang每日一练(leetDay0085) 2的幂、数字 1 的个数
|
3月前
|
算法 C++ Python
Java每日一练(20230430) 文本左右对齐、素数和、整数转英文表示
Java每日一练(20230430) 文本左右对齐、素数和、整数转英文表示
28 0
Java每日一练(20230430) 文本左右对齐、素数和、整数转英文表示
|
3月前
|
Java Go C++
Java每日一练(20230421) 整数排列、数组排序、单词搜索
Java每日一练(20230421) 整数排列、数组排序、单词搜索
24 0
Java每日一练(20230421) 整数排列、数组排序、单词搜索