搜尋
首頁Javajava教程詳細介紹Java 位元組數組類型(byte[])與int型別互轉方法的程式碼實例

下面小編就為大家帶來一篇Java 位元組陣列型別(byte[])與int型別互轉方法。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧

程式碼如下:


public class CommonUtils {
 //高位在前,低位在后
 public static byte[] int2bytes(int num){
 byte[] result = new byte[4];
 result[0] = (byte)((num >>> 24) & 0xff);//说明一
 result[1] = (byte)((num >>> 16)& 0xff );
 result[2] = (byte)((num >>> 8) & 0xff );
 result[3] = (byte)((num >>> 0) & 0xff );
 return result;
 }
 
 //高位在前,低位在后
 public static int bytes2int(byte[] bytes){
 int result = 0;
 if(bytes.length == 4){
  int a = (bytes[0] & 0xff) << 24;//说明二
  int b = (bytes[1] & 0xff) << 16;
  int c = (bytes[2] & 0xff) << 8;
  int d = (bytes[3] & 0xff);
  result = a | b | c | d;
 }
 return result;
 }
 
 public static void main(String[] args){
 int a = -64;
 System.out.println("-64="+Integer.toBinaryString(-64));
 byte[] bytes = CommonUtils.int2bytes(a);
 for(int i = 0 ; i<4 ; i++){
  System.out.println(bytes[i]);
 }
 a = CommonUtils.bytes2int(bytes);
 System.out.println(a);
 
 }
}


運行結果如下:


-64=11111111111111111111111111000000
-1
-1
-1
-64
-64


##說明1:

-64轉換為二進位原碼為[10000000][00000000][00000000][010000000]

#將原碼變成補碼為[11111111][1111111] [11111111][11000000],與控制台輸出結果相同,可以看到在

java中二進位以補碼的形式表示

-64 >>> 24後(無符號右移,高位補0),變成[00000000][00000000][00000000][11111111]

將上步結果& 0xff後,仍為[00000000][000000][000000] 11111111],由於0xff的值為[00000000][00000000][00000000][11111111],故& 0xff的目的是將最

低8位元保持不變,其餘位置為0#接著將結果強轉為byte類型,保留低位,截去高位,變成[11111111],可以看出

上步的0xff其實是沒有必要的,無論高位是多少,最終都會被截去

故result[0]為[11111111]=-1

依此類推:

result[1]为[11111111]=-1
result[2]为[11111111]=-1
result[3]为[11000000]=-64

##說明2:

byte[0]為[11111111],首先會將byte[0]轉換為int型別(在位移運算前,會將byte型別轉換為int型,若為正數,高位補0,若為負數,高位補1

),高位補1,變為[11111111][11111111][11111111][11111111]

將上步結果& 0xff之後,將變為[00000000][00000000][00000000][11111111]

然後將上步結果

同理獲得b、c、d

最終a | b | c | d 即:

[11111111][00000000][00000000][00000000] | 
[00000000][11111111][00000000][00000000] | 由于<<16位之前& 0xff,故保证b的最高8位都为0
[00000000][00000000][11111111][00000000] | 由于<<8位之前& 0xff,故保证c的最高16位都为0
[00000000][00000000][00000000][11000000] 由于& 0xff,故保证d的最高24为都为0
=[11111111][11111111][11111111][11000000] = -64

可以看可以看到為了確保byte轉換成int時,補位不會對最終a | b | c | d的結果產生影響(置為0),

& 0xff是必須的

short與byte []之間的轉換,long與byte[]之間的轉換也是類似的

PS:

1,int型別佔4個字節,而byte型別只佔1個字節

2,原碼:最高位為符號位,其餘位用來表示數值大小

2的原碼:00000010

-2的原碼:10000010

3,反碼:

正數的反碼與其原碼相同;

負數的反碼符號位元保持不變,其餘位元按位取反2的反碼:00000010

-2的反碼:11111101

4,補碼:正數的補碼與其原碼相同;負數的補碼為此負數的反碼+1

2的補碼:00000010

# -2的補碼:11111110

 以上就是詳細介紹Java 位元組數組類型(byte[])與int類型互連方法的程式碼實例的內容,更多相關內容請關注PHP中文網(www .php.cn)!


#
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境