最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java任意長度byte數(shù)組轉(zhuǎn)換為int數(shù)組的方法

 更新時間:2020年07月26日 15:27:22   作者:zhuimengfb  
這篇文章主要給大家介紹了關(guān)于Java任意長度byte數(shù)組轉(zhuǎn)換為int數(shù)組的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

嗯。最近工程上遇到一個byte數(shù)組轉(zhuǎn)換為int的問題,解決過程中遇到了幾個坑,經(jīng)過各種查資料終于還是解決了。撒花。

Java的位運算以及byte數(shù)組與其他類型數(shù)據(jù)的轉(zhuǎn)換比c/c++感覺麻煩一些。這里簡單說明一下byte數(shù)組和int的轉(zhuǎn)換吧。

總所周知,int類型數(shù)據(jù)在Java中占據(jù)32 bit,byte占據(jù)8 bit,這樣的話,正常情況下4個byte可以轉(zhuǎn)換成一個int類型數(shù)據(jù)。

當然,不正常情況下,3個byte或者2個byte甚至1個byte都可以轉(zhuǎn)換為int數(shù)據(jù),只需要高位補上就行。

嗯,坑來了。由于Java中int類型是有符號的,最高位為符號位,為0的話表示正數(shù),為1的話表示負數(shù)。

以四位byte數(shù)組為例,要拼接成一個32 bit的int數(shù)據(jù)的話,只需要將四個byte按順序連接起來就行,這樣的話,就需要對四個byte進行移位操作。

第一位左移24位,第二位左移16位,第三位左移8位,第四位不動。。然后進行或運算。。

嗯,看起來好像完美。。。然而之前說過Java是有符號的,對于后三個byte,如果是負數(shù)的話,則高位都是1,這樣高位的或運算將失效,前面的byte數(shù)據(jù)也就沒有意義。

因此,對于后三個byte數(shù)據(jù),進行移位操作前需要和0XFF進行與運算,消除高24位。

代碼如下

public int bytesToInt(byte[] bytes){
  return bytes[0]<<24|(bytes[1]&0xff)<<16|(bytes[2]&0xff)<<8|(bytes[3]&0xff);
 }

對于不正常的情況,比如3個byte轉(zhuǎn)換為int,則第一個左移16位,第二位與0xff后左移8位,第三位與0xff,然后進行或運算即可。

同理可運用于2個byte。

對于1個byte,直接強制轉(zhuǎn)換為int即可。

嗯。。大概就是這樣,第一位移位,之后的分別和0xff相與后再移位,最后進行或運算即可。

后來,閑著無聊,如果一個byte數(shù)組超過4位后,怎么辦?當然返回一個int數(shù)組就行啦,反正4位byte轉(zhuǎn)換成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<bytesLength+4-lengthFlag;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提取。。

總結(jié)

到此這篇關(guān)于Java任意長度byte數(shù)組轉(zhuǎn)換為int數(shù)組的文章就介紹到這了,更多相關(guān)Java byte數(shù)組轉(zhuǎn)換為int數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot+Shiro+Jwt實現(xiàn)權(quán)限控制的項目實踐

    Springboot+Shiro+Jwt實現(xiàn)權(quán)限控制的項目實踐

    如今的互聯(lián)網(wǎng)已經(jīng)成為前后端分離的時代,所以本文在使用SpringBoot整合Shiro框架的時候會聯(lián)合JWT一起搭配使用,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Jmeter安裝的方法步驟詳解

    Jmeter安裝的方法步驟詳解

    這篇文章主要介紹了Jmeter安裝的方法步驟詳解,Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設(shè)計用于Web應(yīng)用測試,但后來擴展到其他測試領(lǐng)域,需要的朋友可以參考下
    2019-07-07
  • Java的動態(tài)分派和靜態(tài)分派的實現(xiàn)

    Java的動態(tài)分派和靜態(tài)分派的實現(xiàn)

    這篇文章主要介紹了Java的動態(tài)分派和靜態(tài)分派的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Java使用Deque實現(xiàn)堆棧的方法

    Java使用Deque實現(xiàn)堆棧的方法

    這篇文章主要介紹了Java使用Deque實現(xiàn)堆棧的方法,實例分析了java簡單實現(xiàn)堆棧的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 關(guān)于HttpClient 引發(fā)的線程太多導(dǎo)致FullGc的問題

    關(guān)于HttpClient 引發(fā)的線程太多導(dǎo)致FullGc的問題

    這篇文章主要介紹了關(guān)于HttpClient 引發(fā)的線程太多導(dǎo)致FullGc的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 詳解利用SpringCloud搭建一個最簡單的微服務(wù)框架

    詳解利用SpringCloud搭建一個最簡單的微服務(wù)框架

    這篇文章主要介紹了詳解利用SpringCloud搭建一個最簡單的微服務(wù)框架,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 使用mybatis-plus-generator進行代碼自動生成的方法

    使用mybatis-plus-generator進行代碼自動生成的方法

    這篇文章主要介紹了使用mybatis-plus-generator進行代碼自動生成的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • java 自動生成略縮圖示例代碼

    java 自動生成略縮圖示例代碼

    本篇文章,在前輩的經(jīng)驗基礎(chǔ)上,分別對單圖生成略縮圖和批量生成略縮圖做個小結(jié)
    2013-07-07
  • MybatisPlus將自定義的sql列表查詢返回改為分頁查詢

    MybatisPlus將自定義的sql列表查詢返回改為分頁查詢

    本文主要介紹了MybatisPlus將自定義的sql列表查詢返回改為分頁查詢,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Java?BoxLayout(盒子布局)布局管理器解析

    Java?BoxLayout(盒子布局)布局管理器解析

    這篇文章主要介紹了Java?BoxLayout(盒子布局)布局管理器解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

卢氏县| 巢湖市| 英德市| 广饶县| 大庆市| 广安市| 宜君县| 舟曲县| 牡丹江市| 莲花县| 拉孜县| 晋宁县| 乌海市| 清丰县| 谢通门县| 绥中县| 民县| 徐水县| 嫩江县| 阜新市| 睢宁县| 莫力| 上林县| 上思县| 吉林省| 永善县| 五台县| 城市| 菏泽市| 大化| 韩城市| 乌拉特中旗| 大安市| 遂宁市| 广宁县| 城步| 铁岭市| 商水县| 达州市| 伊吾县| 曲阜市|