为了在接下来的篇章中讲解用Java实现文件的归档和解归档,需要先了解一下Java中int型与byte型数组之间的相互转换。

首先,我们先来看看int型转换成byte型数组。

我们知道,Java中,一个int型占用4个字节,一个byte型占用1个字节,所以,对于一个int型,我们需要一个长度为4的byte型数组来对其进行存储。  

31位——24位

23位——16位

15位——8位

7位——0位

一个int型的4个字节如上图所示,假设用来存储的字节数组为bytes[],那么,我们可以用bytes[0]存储int型的第一个字节(7位——0位),bytes[1]存储int型的第二个字节(15位——8位),bytes[2]存储int型的第三个字节(23位——16位),bytes[3]存储int型的第四个字节(31位——24位)。具体代码如下:

public static byte[] int2Bytes(int integer)
{byte[] bytes=new byte[4];bytes[3]=(byte) integer>>24;bytes[2]=(byte) integer>>16;bytes[1]=(byte) integer>>8;bytes[0]=(byte) integer;return bytes;
}

这里需要注意的是,当你将一个int型强制类型转换为byte型的时候,最高的三个字节会被砍掉,只留下最低的8位赋值给byte型。

接下来,我们来看一下byte型数组转换成int型。

我们知道,计算机是以补码的形式存放数值型数据,当我们对一个byte型进行移位操作的时候,这个byte型会先自动补全到32位(即一个int型),再进行移位操作。举个例子:一个byte型的-1,在内存中的补码是八个1:11111111,当我们进行移位时,(比如说左移8位),它会进行补全,而且是有符号位的补全,再左移8位,所以最后结果是:11111111 11111111 11111111 00000000,但我们因为最后在将byte型数组转换成int型的时候,需要对数组元素使用按位或( | )操作,因此,移位结果前面的符号位如果不去除,将影响我们的运算,得出一个错误的结果。(上例中我们左移8位,需要将11111111 11111111 11111111 00000000去掉前面的那些1,只保留次低位上的1,即为:0000000000000000 11111111 00000000)。

我们可以先将byte数据元素与0xff(二进制的00000000 00000000 00000000 11111111)进行按位与运算( & ),再进行移位,来去除前面的符号位。byte型数组转换成int型的代码如下:

public static int bytes2Int(byte[] bytes )
{//如果不与0xff进行按位与操作,转换结果将出错,有兴趣的同学可以试一下。int int1=bytes[0]&0xff;int int2=(bytes[1]&0xff)<<8;int int3=(bytes[2]&0xff)<<16;int int4=(bytes[3]&0xff)<<24;return int1|int2|int3|int4;
}

Java语言int型与byte型数组的转换相关推荐

  1. 数组转集合、集合转数组、字符串数组与int型、long型数组等的转换以及排序问题

    ==================类型转换================== 在项目中经常会遇到数组转集合.集合转数组.数组之间类型转换等操作 1.数组转集合 为了实现把一个数组转换成一个Arra ...

  2. Java语言Int与byte[]互转详解分析

    我先贴出最终转换的代码,再来进行一步一步的介绍: /*** 将int数值转换为占四个字节的byte数组** @param value 要转换的int值* @return byte数组*/ public ...

  3. c语言int型变量写入char数组的方法

    c语言int型变量写入char数组的方法 #include<stdio.h>int main() {int iMum = 1000000;int iReNum = 0;char cArra ...

  4. java数组最大长度_Java整型数组的最大长度到底有多长?

    今天上网查了一下,各种说法都有,这个问题似乎总困扰我们Java初学者,无奈,只好自己试了一下,以下是我的测试代码,如果有错误,还望不吝赐教! 使用eclipse默认的vm arguments,运行以下 ...

  5. java算法int型整数反转的另类解法

    要求:输入一个int型整数,将这个整数中每位上的数字进行反转(除福符号位外)输出,若反转后的数字超过了int型范围,则输出0: 如:12340--------4321 -1234----------- ...

  6. C 语言 int 型乘法溢出问题

    2019独角兽企业重金招聘Python工程师标准>>> long l; int a, b; l = a*b; 因为 a*b 的结果仍然以 int 型保存, 所以即使 l 为long, ...

  7. C语言|int型最大值和最小值

    一.int型的最值 有符号 最小值:-2147483647-1 最大值:2147483647 无符号 最大值:0xffffffff 最小值:0 大家可以在整形类型的取值范围限制头文件中查看:limit ...

  8. java write int,void write(byte[] b, int off, int len)

    void write(byte[] b, int off, int len) 描述 (Description) java.io.PipedOutputStream.write(byte[] b, in ...

  9. c语言int型等长输出,c语言先程序设计15第十四讲第六章下.ppt

    c语言先程序设计15第十四讲第六章下 高级语言程序设计 主讲教师:贾彩燕 计算机与信息技术学院 计算机科学与技术系 cyjia@ 第六章 数组 主要内容 数组的概念.定义和使用 数组程序实例 数组作为 ...

最新文章

  1. ES6 let和const 命令
  2. c语言 位域 sizeof,含位域结构体的sizeof
  3. android studio自动注释
  4. oracle最佳环境,创建最适合的Oracle运行环境
  5. 连续设置多张背景图片并且平铺
  6. PID是什么?在做系统的故障排除时如何使用它?
  7. LINUX 内存使用情况
  8. css布局方式_网页布局都有哪种?一般都用什么布局?
  9. [摘自MSDN] ASP.Net2.0学习 [2] 主题 1 :ASP.NET 主题和外观概述
  10. SpringBoot--springboot启动类和controller的配置
  11. python写网页插件_用python 实现activex网页控件
  12. 如何使用jQuery更改超链接的href
  13. docker tar 镜像 容器相互转换
  14. 中断(二)—— x86 APIC
  15. XenApp / XenDesktop 7.6 初体验三 StoreFront和Citrix Receiver
  16. android tracelog分析,使用 Traceview 检查跟踪日志
  17. java线程的五种状态
  18. 三元平衡系统与反物质研究
  19. 从零开始学视觉里程计——一个初学者教程
  20. 搭建文华财经博易大师信管家多国语言IQ Option二元期权源码

热门文章

  1. DSP6678 RapidIO基本原理之一
  2. win10远程桌面多用户登录
  3. 清除css万能浮动代码
  4. java论文管理系统_Java人事管理系统(论文+源码)
  5. 服务器在局域网联机中显示,网络版局域网内如何连接设置多台电脑联机操作?...
  6. JDK8新特性(五):JDK8时间日期API
  7. 华为b199Android版本,华为B199刷机包 MIUI8安卓6.0插桩适配ROM 7.4.5版
  8. 无向图的最大团/最大独立集
  9. 融云办政事: “小网格”也能实现“大治理”
  10. js不足十位自动补0函数