这篇文章主要讲解了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); }