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

Java 字節(jié)數(shù)組(byte[])和整型(int)的相互轉(zhuǎn)換

 更新時間:2023年12月24日 15:09:00   作者:消逝者  
在Java編程中,有時需要將字節(jié)類型(byte)轉(zhuǎn)換為整數(shù)類型(int),或者反過來轉(zhuǎn)換,本文主要介紹了Java 字節(jié)數(shù)組(byte[])和整型(int)的相互轉(zhuǎn)換,感興趣的可以了解一下

前言

恰巧碰到了字節(jié)數(shù)組和整型的轉(zhuǎn)換問題,特在此總結(jié)一下。將 int 按照小端法映射到 byte[] 中。即最低 8 位放在 byte[0] 中,依次類推。

一、int 轉(zhuǎn)換為 byte[]

這個實現(xiàn)起來比較簡單,先保存最低的 8 位到 byte 數(shù)組中,然后不斷的右移 8 位,每次保存低 8 位數(shù)據(jù)即可,參考代碼:(這里包含一個 int 到 byte 的轉(zhuǎn)換,轉(zhuǎn)換規(guī)則是截取 int 的最低 8 位作為 byte 值)

    public static byte[] intToBytes(int a){
        byte[] ans=new byte[4];
        for(int i=0;i<4;i++)
            ans[i]=(byte)(a>>(i*8));//截斷 int 的低 8 位為一個字節(jié) byte,并存儲起來
        return ans;
    }

二、測試代碼

為了驗證轉(zhuǎn)換結(jié)果,簡單寫了兩個方法用來按位打印 int 和 byte,可參考如下:

    public static void intPrint(int a){//將 int 按位從左到右打印
        int count=0;
        for(int i=31;i>=0;i--){
            System.out.print((a>>i)&1);
            count++;
            if(count==4){//每四位為一組,用空格分開
                System.out.print(" ");
                count=0;
            }
        }
        System.out.println();
    }
    public static void bytePrint(byte a){//將 byte 按位從左到右打印
        int count=0;
        for(int i=7;i>=0;i--){
            System.out.print((a>>i)&1);
            count++;
            if(count==4){//每四位為一組,用空格分開
                System.out.print(" ");
                count=0;
            }
        }
        System.out.println();
    }

三、測試

測試一下 int 到 byte[] 的正確性:用一個整數(shù)來測試一下,如下:

    public static void main(String[] args) {
        int c=968523,d=-65423;
        byte[] ans=intToBytes(d);
        intPrint(d);
        for(int i=0;i<4;i++)
            bytePrint(ans[i]);
            
    }

輸出結(jié)果為:
1111 1111 1111 1111 0000 0000 0111 0001
0111 0001
0000 0000
1111 1111
1111 1111

 算法執(zhí)行無誤。

四、byte[] 轉(zhuǎn)換為 int

這個實現(xiàn)起來也比較簡單, 每次將 byte 值保存到 int 的最低 8 位,然后 int 左移 8 位,繼續(xù)保存新的 byte 值即可,參考代碼:

    public static int bytesToInt(byte[] a){
        int ans=0;
        for(int i=0;i<4;i++){
            ans<<=8;//左移 8 位
            ans|=a[3-i];//保存 byte 值到 ans 的最低 8 位上
            intPrint(ans);
        }
        return ans;
    }

驗證一下(這一次采用整數(shù) c 來說明問題,整數(shù) d 恰好可以得到正確結(jié)果…):

    public static void main(String[] args) {
        int c=968523,d=-65423;
        byte[] ans=intToBytes(c);
        intPrint(c);
        for(int i=0;i<4;i++)
            bytePrint(ans[i]);

        int e=bytesToInt(ans);
    }

輸出結(jié)果:
0000 0000 0000 1110 1100 0111 0100 1011
0100 1011
1100 0111
0000 1110
0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1110
1111 1111 1111 1111 1111 1111 1100 0111      1111 1111 1111 1111 1100 0111 0100 1011

Error:粗體顯示和我們預(yù)料中的不太一樣,其原因在于:語句 ans|=a[3-i];中,執(zhí)行流程為:先將 byte a[3-i] 提升到 int ,然后再和 ans 取或操作,最后將結(jié)果賦給 ans。
在提升的過程中包含一個 byte 到 int 的轉(zhuǎn)換,轉(zhuǎn)換規(guī)則:如果 byte 值為負(fù),即最高位為 1,那么在前面補(bǔ)上 24 個 1 湊夠 32 位作為 int 的值,如果 byte 值為正,即最高位為 0,那么在前面補(bǔ)上 24個 0 得到新的 int 值。

為了每次在將 byte 轉(zhuǎn)換為 int 時,前面都補(bǔ)上 0 ,這里可以將它先和 0xff 取 &。這里的 0xff 如果轉(zhuǎn)換為 int 四字節(jié)的話為:0000 0000 0000 0000 0000 0000 1111 1111 。當(dāng)然了,更加清晰的寫法見下面代碼。

修改之后的代碼如下:

    public static int bytesToInt(byte[] a){
        int ans=0;
        for(int i=0;i&lt;4;i++){
            ans&lt;&lt;=8;
            ans|=(a[3-i]&amp;0xff);
            /* 這種寫法會看起來更加清楚一些:
            int tmp=a[3-i];
            tmp=tmp&amp;0x000000ff;
            ans|=tmp;*/
            intPrint(ans);
        }
        return ans;
    }
    
    public static void main(String[] args) {
        int c=968523,d=-65423;
        byte[] ans=intToBytes(c);
        intPrint(c);
        for(int i=0;i&lt;4;i++)
            bytePrint(ans[i]);

        int e=bytesToInt(ans);
        return;
    }

      輸出結(jié)果:
      0000 0000 0000 1110 1100 0111 0100 1011
      0100 1011
      1100 0111
      0000 1110
      0000 0000
      0000 0000 0000 0000 0000 0000 0000 0000
      0000 0000 0000 0000 0000 0000 0000 1110
      0000 0000 0000 0000 0000 1110 1100 0111
      0000 0000 0000 1110 1100 0111 0100 1011

能夠看到可以得到正確結(jié)果。

總結(jié)

需要注意的是:在 8 位 byte 提升到 32 位 int 時,由于數(shù)組在計算機(jī)中以補(bǔ)碼形式存在,所以要區(qū)分正負(fù)的。正數(shù)前面補(bǔ) 0 ,負(fù)數(shù)前面補(bǔ) 1。而為了消除其差異性,僅保留我們所感興趣的低 8 位,需要先將可能存在的 1 均變?yōu)?0,所以要先和 0xff 做 & 操作; 或者先提升到 int ,然后和0x000000ff 取 & 。

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

相關(guān)文章

  • java使用軟引用實現(xiàn)緩存機(jī)制示例

    java使用軟引用實現(xiàn)緩存機(jī)制示例

    這篇文章主要為大家介紹了java使用軟引用實現(xiàn)緩存機(jī)制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • RocketMQ在Spring Boot上的基礎(chǔ)使用

    RocketMQ在Spring Boot上的基礎(chǔ)使用

    本文主要介紹了RocketMQ在Spring Boot上的基礎(chǔ)使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • Java手動方式創(chuàng)建枚舉類示例

    Java手動方式創(chuàng)建枚舉類示例

    這篇文章主要介紹了Java手動方式創(chuàng)建枚舉類,結(jié)合實例形式分析了java創(chuàng)建枚舉類的方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • 基于HttpClient上傳文件中文名亂碼的解決

    基于HttpClient上傳文件中文名亂碼的解決

    這篇文章主要介紹了HttpClient上傳文件中文名亂碼的解決方案,具有很好的參考價值,希望對大家有所幫助。
    2021-07-07
  • java 文件大數(shù)據(jù)Excel下載實例代碼

    java 文件大數(shù)據(jù)Excel下載實例代碼

    這篇文章主要介紹了java 文件大數(shù)據(jù)Excel下載實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • win10安裝rabbitMQ的詳細(xì)步驟

    win10安裝rabbitMQ的詳細(xì)步驟

    RabbitMQ是一個開源的消息中間件(Message Broker),它基于AMQP協(xié)議設(shè)計,用于在分布式系統(tǒng)中實現(xiàn)消息的高效、可靠傳輸,本文給打擊介紹了win10安裝rabbitMQ的詳細(xì)步驟,文中通過圖文講解的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Java實現(xiàn)日志文件監(jiān)聽并讀取相關(guān)數(shù)據(jù)的方法實踐

    Java實現(xiàn)日志文件監(jiān)聽并讀取相關(guān)數(shù)據(jù)的方法實踐

    本文主要介紹了Java實現(xiàn)日志文件監(jiān)聽并讀取相關(guān)數(shù)據(jù)的方法實踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot中ClientAbortException: Broken pipe異常解決及優(yōu)化方案

    SpringBoot中ClientAbortException: Broken pipe異常解決及優(yōu)

    這篇文章主要介紹了如何解決 Spring Boot 中的 ClientAbortException: Broken pipe 異常及優(yōu)化方案,異常發(fā)生在 Spring Boot 項目中,表示客戶端與服務(wù)端的 HTTP 請求連接被中斷,接下來由小編給大家介紹一下出現(xiàn)這個問題的原因,需要的朋友可以參考下
    2024-12-12
  • Java校驗文件類型實現(xiàn)方式

    Java校驗文件類型實現(xiàn)方式

    本文介紹了判斷文件類型的方法,包括MIME類型判斷和文件頭校驗,MIME類型判斷適合判斷指定文件類型,需要Java7及以上版本支持,且不同系統(tǒng)可能有差異,文件頭校驗直接檢查文件開頭的幾個字節(jié),可以判斷文件格式是否正確
    2026-03-03
  • JDK自帶的序列化方式優(yōu)缺點及實現(xiàn)原理面試精講

    JDK自帶的序列化方式優(yōu)缺點及實現(xiàn)原理面試精講

    這篇文章主要為大家介紹了JDK自帶的序列化方式優(yōu)缺點及實現(xiàn)原理面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10

最新評論

白朗县| 托克逊县| 铅山县| 安义县| 高密市| 泽州县| 许昌县| 辉县市| 普格县| 疏勒县| 哈尔滨市| 肇州县| 新河县| 海晏县| 保山市| 舞钢市| 大新县| 盘锦市| 会同县| 微博| 札达县| 平利县| 沅江市| 资中县| 开远市| 云林县| 泰顺县| 仙桃市| 元阳县| 富宁县| 茶陵县| 通山县| 齐齐哈尔市| 容城县| 洪雅县| 清河县| 汨罗市| 双柏县| 聂拉木县| 稷山县| 石河子市|