Java中用字节数组表示整数和用整数表示字节数组-阿里云开发者社区

开发者社区> 木叶_之荣> 正文

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));
    }
我们看看测试结果:



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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java中类型所占字节数以及可表示的数字个数
基本概念 字节的单位是byte。位的单位是bit。1byte=8bit。 1bit能表示多少个数字——最小0,最大1。2的1次方个。 2bit能表示多少个数字——最小00,最大11。2的2次方个。 3bit能表示多少个数——最小000,最大111。2的3次方个。 依此类推—8bit可以表示2的8次方共256个数字。 若数没有正负之分可表示0—255共256个数字。若有正负之分可
1078 0
Java中用字节数组表示整数和用整数表示字节数组
程序中的所有数在计算机内存中都是以二进制的形式储存的。所以有时候我们还是有必要学习一下位运算的。我们知道在java中一个整型是占用四个字节32位的,而一 个byte类型占用一个字节8位的。所以我们可以用一个整型来最多表示一个长度为4的byte数组,同样我们可以用一个长度为4的byte数组来表示一个整型。下面我们就 看一下怎么用代码怎么去写整型和byte数组的相互转换。 字节数组表示一
1186 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4425 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5723 0
笑谈字符串与字符、字节数组的关系 | 带你学《Java面向对象编程》之三十一
本节主要为读者介绍了Java为开发者提供的一些用于进行字符串与字符、字节数组之间相互转换的基本方法。
812 0
150
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载