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

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

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

前言

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

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

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

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

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

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

第一位左移24位,第二位左移16位,第三位左移8位,第四位不動(dòng)。。然后進(jìn)行或運(yùn)算。。

嗯,看起來(lái)好像完美。。。然而之前說(shuō)過(guò)Java是有符號(hào)的,對(duì)于后三個(gè)byte,如果是負(fù)數(shù)的話,則高位都是1,這樣高位的或運(yùn)算將失效,前面的byte數(shù)據(jù)也就沒(méi)有意義。

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

代碼如下

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

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

同理可運(yùn)用于2個(gè)byte。

對(duì)于1個(gè)byte,直接強(qiáng)制轉(zhuǎn)換為int即可。

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

后來(lái),閑著無(wú)聊,如果一個(gè)byte數(shù)組超過(guò)4位后,怎么辦?當(dāng)然返回一個(gè)int數(shù)組就行啦,反正4位byte轉(zhuǎn)換成1個(gè)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;
 }

嗯。。有空再來(lái)寫(xiě)寫(xiě)Java的bit提取。。

總結(jié)

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

相關(guān)文章

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

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

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

    Jmeter安裝的方法步驟詳解

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

    Java的動(dòng)態(tài)分派和靜態(tài)分派的實(shí)現(xiàn)

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

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

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

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

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

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

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

    使用mybatis-plus-generator進(jìn)行代碼自動(dòng)生成的方法

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

    java 自動(dòng)生成略縮圖示例代碼

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

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

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

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

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

最新評(píng)論

彭泽县| 永济市| 东辽县| 肇东市| 弥渡县| 漳平市| 丹棱县| 乐清市| 扬州市| 南召县| 南溪县| 咸丰县| 贡山| 安图县| 晋江市| 四子王旗| 长垣县| 山阴县| 叙永县| 甘孜县| 逊克县| 民勤县| 十堰市| 济南市| 尉犁县| 平度市| 合江县| 新巴尔虎右旗| 韶山市| 克山县| 霸州市| 阳信县| 绍兴市| 湖北省| 大宁县| 米林县| 马公市| 瑞昌市| 平谷区| 康马县| 和政县|