博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中用字节数组表示整数和用整数表示字节数组
阅读量:5839 次
发布时间:2019-06-18

本文共 2173 字,大约阅读时间需要 7 分钟。

程序中的所有数在计算机内存中都是以二进制的形式储存的。所以有时候我们还是有必要学习一下位运算的。我们知道在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));    }
我们看看测试结果:

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

你可能感兴趣的文章
ios的google解析XML框架GDataXML的配置及使用
查看>>
netty-当一个客户端连接到来的时候发生了什么
查看>>
PHP_5.3.20 源码编译安装PHP-FPM
查看>>
在51CTO三年年+了,你也来晒晒
查看>>
js控制图片等比例缩放
查看>>
Java高级开发工程师面试考纲
查看>>
FreeMarker表达式
查看>>
Debian9.2 下使用vnstat查看服务器带宽流量统计
查看>>
NGINX + PHP-FPM 502
查看>>
mysql数据备份与恢复
查看>>
Openstack API常用命令
查看>>
OpenSSL漏洞凶猛来袭 慧眼恶意代码监测应对有方
查看>>
C语言 喝汽水问题
查看>>
LINUX中搭建DNS服务器,实现正向、反向以及访问不同DNS解析
查看>>
SCCM2012 R2实战系列之十:解决WDS服务无法启动问题(错误1067:进程意外终止)...
查看>>
怎么防止重复发送Ajax
查看>>
ubuntu 下安装 mysql
查看>>
关于k-means聚类算法的matlab实现
查看>>
Git分支2
查看>>
一键安装Gitlab后的备份、迁移与恢复
查看>>