日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 字节数组(byte[])和整型(int)的相互转换

發布時間:2025/6/17 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 字节数组(byte[])和整型(int)的相互转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、int 轉換為 byte[]
  • 二、測試代碼
  • 三、測試
  • 四、byte[] 轉換為 int
  • 總結


前言

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


一、int 轉換為 byte[]

??????這個實現起來比較簡單,先保存最低的 8 位到 byte 數組中,然后不斷的右移 8 位,每次保存低 8 位數據即可,參考代碼:(這里包含一個 int 到 byte 的轉換,轉換規則是截取 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 位為一個字節 byte,并存儲起來return ans;}

二、測試代碼

??????為了驗證轉換結果,簡單寫了兩個方法用來按位打印 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[] 的正確性:用一個整數來測試一下,如下:

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]);}

??????輸出結果為:
??????1111 1111 1111 1111 0000 0000 0111 0001
??????0111 0001
??????0000 0000
??????1111 1111
??????1111 1111

??????算法執行無誤。

四、byte[] 轉換為 int

??????這個實現起來也比較簡單, 每次將 byte 值保存到 int 的最低 8 位,然后 int 左移 8 位,繼續保存新的 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;}

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

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);}

??????輸出結果:
??????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:粗體顯示和我們預料中的不太一樣,其原因在于:這里包含一個 byte 到 int 的轉換,轉換規則:如果 byte 值為負,即最高位為 1,那么在前面補上 24 個 1 湊夠 32 位作為 int 的值,如果 byte 值為正,即最高位為 0,那么在前面補上 24個 0 得到新的 int 值。

??????修改之后:為了每次在將 byte 轉換為 int 時,前面都補上 0 ,這里可以將它先和 0xff 取 &。修改之后的代碼如下:

public static int bytesToInt(byte[] a){int ans=0;for(int i=0;i<4;i++){ans<<=8;ans|=(a[3-i]&0xff);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<4;i++)bytePrint(ans[i]);int e=bytesToInt(ans);return;}

??????輸出結果:
??????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

??????能夠看到可以得到正確結果。


總結

??????需要注意的是:在 8 位 byte 提升到 32 位 int 時,由于數組在計算機中以補碼形式存在,所以要區分正負的。正數前面補 0 ,負數前面補 1。而為了消除其差異性,僅保留我們所感興趣的低 8 位,需要先將可能存在的 1 均變為 0,所以要先和 0xff 做 & 操作。

總結

以上是生活随笔為你收集整理的Java 字节数组(byte[])和整型(int)的相互转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。