Java任意长度字节数组怎么转换为int数组

  介绍

这篇文章主要讲解了Java任意长度字节数组怎么转换为int数组,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

<强>前言

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

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

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

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

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

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

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

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

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

代码如下

公共int [] bytesToInts (byte[]字节){
  int bytesLength=bytes.length;
  int [] int=new int [bytesLength % 4==0, # 63;bytesLength/4: bytesLength/4 + 1];
  int lengthFlag=4;
  而(lengthFlag<=bytesLength) {
  int [lengthFlag/4 - 1]=(字节(lengthFlag-4) & lt; & lt; 24) |(字节(lengthFlag-3)和0 xff) & lt; & lt; 16 |
  (字节(lengthFlag-2)和0 xff) & lt; & lt; 8 |(字节(lengthFlag-1)和0 xff);
  lengthFlag +=4;
  }
  for (int i=0; i< bytesLength + 4-lengthFlag;我+ +){
  如果(i==0) int [lengthFlag/4 - 1] |=字节(lengthFlag-4 + i) & lt; & lt; 8 * (bytesLength + 4-lengthFlag-i-1);
  其他int [lengthFlag/4 - 1] |=(字节(lengthFlag-4 + i)和0 xff) & lt; & lt; 8 * (bytesLength + 4-lengthFlag-i-1);
  }
  返回整数;
  }

看完上述内容,是不是对Java任意长度字节数组怎么转换为int数组有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。

Java任意长度字节数组怎么转换为int数组