沈阳正规网站建设哪家便宜,人工智能网站开发,自己做网站价格,怎么注册域名备案前言嗯。最近工程上遇到一个byte数组转换为int的问题#xff0c;解决过程中遇到了几个坑#xff0c;经过各种查资料终于还是解决了。撒花。Java的位运算以及byte数组与其他类型数据的转换比c/c感觉麻烦一些。这里简单说明一下byte数组和int的转换吧。总所周知#xff0c;int…前言嗯。最近工程上遇到一个byte数组转换为int的问题解决过程中遇到了几个坑经过各种查资料终于还是解决了。撒花。Java的位运算以及byte数组与其他类型数据的转换比c/c感觉麻烦一些。这里简单说明一下byte数组和int的转换吧。总所周知int类型数据在Java中占据32 bitbyte占据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 bytesLengthbytes.length;int[] intsnew int[bytesLength%40? bytesLength/4:bytesLength/41];int lengthFlag4;while (lengthFlagbytesLength){ints[lengthFlag/4-1](bytes[lengthFlag-4]24)|(bytes[lengthFlag-3]0xff)16|(bytes[lengthFlag-2]0xff)8|(bytes[lengthFlag-1]0xff);lengthFlag4;}for (int i0;iif (i0) ints[lengthFlag/4-1]|bytes[lengthFlag-4i]8*(bytesLength4-lengthFlag-i-1);else ints[lengthFlag/4-1]|(bytes[lengthFlag-4i]0xff)8*(bytesLength4-lengthFlag-i-1);}return ints;}嗯。。有空再来写写Java的bit提取。。总结到此这篇关于Java任意长度byte数组转换为int数组的文章就介绍到这了,更多相关Java byte数组转换为int数组内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站