java byte数组转int数组_Java任意长度byte数组转换为int数组的方法

前言

嗯。最近工程上遇到一个byte数组转换为int的问题,解决过程中遇到了几个坑,经过各种查资料终于还是解决了。撒花。

Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些。这里简单说明一下byte数组和int的转换吧。

总所周知,int类型数据在Java中占据32 bit,byte占据8 bit,这样的话,正常情况下4个byte可以转换成一个int类型数据。

当然,不正常情况下,3个byte或者2个byte甚至1个byte都可以转换为int数据,只需要高位补上就行。

嗯,坑来了。由于Java中int类型是有符号的,最高位为符号位,为0的话表示正数,为1的话表示负数。

以四位byte数组为例,要拼接成一个32 bit的int数据的话,只需要将四个byte按顺序连接起来就行,这样的话,就需要对四个byte进行移位操作。

第一位左移24位,第二位左移16位,第三位左移8位,第四位不动。。然后进行或运算。。

嗯,看起来好像完美。。。然而之前说过Java是有符号的,对于后三个byte,如果是负数的话,则高位都是1,这样高位的或运算将失效,前面的byte数据也就没有意义。

因此,对于后三个byte数据,进行移位操作前需要和0XFF进行与运算,消除高24位。

代码如下

public int bytesToInt(byte[] bytes){

return bytes[0]<<24|(bytes[1]&0xff)<<16|(bytes[2]&0xff)<<8|(bytes[3]&0xff);

}

对于不正常的情况,比如3个byte转换为int,则第一个左移16位,第二位与0xff后左移8位,第三位与0xff,然后进行或运算即可。

同理可运用于2个byte。

对于1个byte,直接强制转换为int即可。

嗯。。大概就是这样,第一位移位,之后的分别和0xff相与后再移位,最后进行或运算即可。

后来,闲着无聊,如果一个byte数组超过4位后,怎么办?当然返回一个int数组就行啦,反正4位byte转换成1个int,看着办就行。

public int[] bytesToInts(byte[] bytes){

int bytesLength=bytes.length;

int[] ints=new int[bytesLength%4==0? bytesLength/4:bytesLength/4+1];

int lengthFlag=4;

while (lengthFlag<=bytesLength){

ints[lengthFlag/4-1]=(bytes[lengthFlag-4]<<24)|(bytes[lengthFlag-3]&0xff)<<16|

(bytes[lengthFlag-2]&0xff)<<8|(bytes[lengthFlag-1]&0xff);

lengthFlag+=4;

}

for (int i=0;i

if (i==0) ints[lengthFlag/4-1]|=bytes[lengthFlag-4+i]<<8*(bytesLength+4-lengthFlag-i-1);

else ints[lengthFlag/4-1]|=(bytes[lengthFlag-4+i]&0xff)<<8*(bytesLength+4-lengthFlag-i-1);

}

return ints;

}

嗯。。有空再来写写Java的bit提取。。

总结

到此这篇关于Java任意长度byte数组转换为int数组的文章就介绍到这了,更多相关Java byte数组转换为int数组内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

newcondition java_Java并发Condition接口

全屏java.util.concurrent.locks.Condition接口提供一个线程挂起执行的能力&#xff0c;直到给定的条件为真。 Condition对象必须绑定到Lock&#xff0c;并使用newCondition()方法获取对象。Condition类的方法以下是Condition类中可用的重要方法的列表。序号方法名称描述1publi…

前端学习(2486):$emit

1、父组件可以使用 props 把数据传给子组件。 2、子组件可以使用 $emit 触发父组件的自定义事件。 vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( event, fn );//监听event事件后运行 fn&#xff1b; 例如&#xff1a;子组件&#xff1a; <template><di…

葡萄城报表介绍:B/S 报表软件

葡萄城报表介绍&#xff1a;B/S 报表软件 B/S 报表软件定义 B/S&#xff08;Browser/Server&#xff0c;浏览器/服务器模式&#xff09;也称 B/S 结构&#xff0c;是 WEB 兴起后的一种网络结构模式。B/S 模式是由最开始的 C/S&#xff08;Client/Server&#xff0c;客户机/服务…

java接口与集合_【总结】Java常用集合接口与集合类

目录常见集合接口概述CollectionMapCollection接口Map接口补充内容常见集合接口概述Java中包含许多集合接口。其中比较常见的主要是Collection接口和Map接口&#xff1a;1.1 Collection由单元素组成的集合。其比较常见的直接子接口是List、Set和Queue接口。表1.1 Collection接口…

Hexo自定义页面的方法

原文转自&#xff1a;http://refined-x.com/2017/07/10/Hexo%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A1%B5%E9%9D%A2%E7%9A%84%E6%96%B9%E6%B3%95/ Hexo是静态页博客生成利器&#xff0c;同很多博主一样&#xff0c;前端路上原创技术博客也是使用Hexo生成并托管在Github Page上的&…

java 图形绘制_Java Graphics 图形绘制

Graphics类提供基本绘图方法&#xff0c;Graphics类提供基本的几何图形绘制方法&#xff0c;主要有&#xff1a;画线段、画矩形、画圆、画带颜色的图形、画椭圆、画圆弧、画多边形、画字符串等。画线段drawLinepublic abstract void drawLine(int x1,int y1,int x2,int y2)在此…

woodcut

http://www.lintcode.com/en/problem/wood-cut/# 二分答案&#xff0c;贪心验证&#xff0c;具有单调性 class Solution { public:/***param L: Given n pieces of wood with length L[i]*param k: An integer*return: The maximum length of the small pieces.*/int woodCut(v…

java web应用程序_如何构建Java Web 应用程序 - Spring Boot?

Spring Framework 是可以帮助 Java 开发人员创建企业级应用程序的开源解决方案。构建在该平台基础之上的较热门项目之一是 Spring Boot&#xff0c;它提供一种简化的方法来创建独立的 Java 应用程序。本教程将逐步讲解如何创建示例 Spring Boot 入门 Web 应用&#xff0c;并将其…

工作59:常见报错

常见报错解决 1. 页面显示没有数据 页面显示没有数据的时候&#xff08;三级联动&#xff09;&#xff0c;注意去mounted里面看一下&#xff0c;获取数据的方法如getAddress()&#xff1b;有没有执行&#xff0c;是否将数据渲染到了页面&#xff1b; 2.404 状态码 第一次&a…

Python基础【day02】:元组和购物车练习的知识点

一、元组 元组其实跟列表差不多&#xff0c;也是存一组数&#xff0c;只不是它一旦创建&#xff0c;便不能再修改&#xff0c;所以又叫只读列表 用途&#xff1a;一般情况下用于自己写的程序能存下数据&#xff0c;但是又希望这些数据不会被改变&#xff0c;比如&#xff1a;数…

python库封装_使用SIP对C库进行Python封装

Python中使用C/C模块有许多工具&#xff0c;大名鼎鼎的有SWIG(英文意思为&#xff1a;豪饮)、SIP(英文意思为&#xff1a;啜饮&#xff0c;小口的喝)&#xff0c;还有 boost.python等。其中SIP是从SWIG发展而来&#xff0c;专为Python调用C/C模块使用的(看SIP的命名就能看出来&…

关于jsp,javascript,php等语言

技术一jsp: java植入html技术二javascript(js)植入html技术三早期php植入html弱类型语言和强类型语言弱类型语言无法实现函数重载&#xff0c;没办法转载于:https://www.cnblogs.com/HangZhe/p/7188353.html

python最简易入门_零基础入门python,用最简单的方式即可入门python,没有那么复杂...

python已经开始被越来越多的人喜欢&#xff0c;其中有很多是从未学习过编程的人&#xff0c;那么&#xff0c;如果是从零开始学python的话&#xff0c;会很难吗&#xff1f;其实从零开始学python并不会很难&#xff0c;最简单的方法&#xff0c;往往最有效果&#xff0c;无论你…

hibernate07--关联映射

单向的一对多关联 创建对应的实体类以及映射文件 package cn.bdqn.bean; /*** * author 小豆腐*街道对应的实体类**单向的多对一关联*/ public class Street {private Integer id;private String name;//多个街道 属于 一个区县private District district; //对应的区县p…

java 常用流_Java流类图结构: 流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数...

Java流类图结构&#xff1a;流的概念和作用流是一组有顺序的&#xff0c;有起点和终点的字节集合&#xff0c;是对数据传输的总称或抽象。即数据在两设备间的传输称为流&#xff0c;流的本质是数据传输&#xff0c;根据数据传输特性将流抽象为各种类&#xff0c;方便更直观的进…