導航:首頁 > 編程語言 > javabyte數組轉int數組

javabyte數組轉int數組

發布時間:2022-08-12 03:04:29

java Byte數組轉int數組 加密用的

label27:int j這一行不符合Java的語法規范,肯定是編譯通不過。

⑵ java 如何將byte[4]數組轉換成一個int型數據

java中將4位元組的byte數組轉成一個int值的工具方法如下:
/**
* @param byte[]
* @return int
*/
public static int byteArrayToInt(byte[] b){
byte[] a = new byte[4];
int i = a.length - 1,j = b.length - 1;
for (; i >= 0 ; i--,j--) {//從b的尾部(即int值的低位)開始數據
if(j >= 0)
a[i] = b[j];
else
a[i] = 0;//如果b.length不足4,則將高位補0
}
int v0 = (a[0] & 0xff) << 24;//&0xff將byte值無差異轉成int,避免Java自動類型提升後,會保留高位的符號位
int v1 = (a[1] & 0xff) << 16;
int v2 = (a[2] & 0xff) << 8;
int v3 = (a[3] & 0xff) ;
return v0 + v1 + v2 + v3;
}

⑶ java如何把byte數組里的十六進制轉換成int類型,如下圖的數據,雜么轉換,跪求方法和代碼

示例

packagecom.sdvdxl.other;

publicclassTest{
publicstaticvoidmain(String[]args){
byte[]bytes=newbyte[]{0x00,0x53};
for(byteb:bytes){
System.out.println(Integer.valueOf(b));
}
}
}

結果:

0

83


PS : 使用的時候會自動轉換成10進制的

⑷ 求教如何將一個java的byte數組快速轉換為int數組

byte[] bytes = new byte[1024];
int [] ints = new int[bytes.length];
int index = 0;
for(byte b : bytes){
ints[index++] = (int)b;
}

⑸ JAVA中位元組和Int的轉換

將 byte 數組中的元素 轉換成 int類型 並且放到 int 數組中去

如果 byte 中的數據取出來是負數 那麼就取 它的補碼 否則不變
byte 的范圍 是 -128 到 127 你自己可以舉幾個例子就明白轉換成INT 是什麼數字了

⑹ byte數組與int類型互相轉換的幾種方式

在剖析該問題前請看如下代碼
public static String bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[ i ] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}
上面是將byte[]轉化十六進制的字元串,注意這里b[ i ] & 0xFF將一個byte和 0xFF進行了與運算,然後使用Integer.toHexString取得了十六進制字元串,可以看出
b[ i ] & 0xFF運算後得出的仍然是個int,那麼為何要和 0xFF進行與運算呢?直接 Integer.toHexString(b[ i ]);,將byte強轉為int不行嗎?答案是不行的.

其原因在於:
1.byte的大小為8bits而int的大小為32bits
2.java的二進制採用的是補碼形式

在這里先溫習下計算機基礎理論

byte是一個位元組保存的,有8個位,即8個0、1。
8位的第一個位是符號位,
也就是說0000 0001代表的是數字1
1000 0000代表的就是-1
所以正數最大位0111 1111,也就是數字127
負數最大為1111 1111,也就是數字-128

上面說的是二進制原碼,但是在java中採用的是補碼的形式,下面介紹下什麼是補碼

1、反碼:
一個數如果是正,則它的反碼與原碼相同;
一個數如果是負,則符號位為1,其餘各位是對原碼取反;

2、補碼:利用溢出,我們可以將減法變成加法
對於十進制數,從9得到5可用減法:
9-4=5 因為4+6=10,我們可以將6作為4的補數
改寫為加法:
9+6=15(去掉高位1,也就是減10)得到5.

對於十六進制數,從c到5可用減法:
c-7=5 因為7+9=16 將9作為7的補數
改寫為加法:
c+9=15(去掉高位1,也就是減16)得到5.

在計算機中,如果我們用1個位元組表示一個數,一個位元組有8位,超過8位就進1,在內存中情況為(100000000),進位1被丟棄。

⑴一個數為正,則它的原碼、反碼、補碼相同
⑵一個數為負,剛符號位為1,其餘各位是對原碼取反,然後整個數加1

- 1的原碼為 10000001
- 1的反碼為 11111110
+ 1
- 1的補碼為 11111111

0的原碼為 00000000
0的反碼為 11111111(正零和負零的反碼相同)
+1
0的補碼為 100000000(舍掉打頭的1,正零和負零的補碼相同)

Integer.toHexString的參數是int,如果不進行&0xff,那麼當一個byte會轉換成int時,由於int是32位,而byte只有8位這時會進行補位,
例如補碼11111111的十進制數為-1轉換為int時變為好多1啊,呵呵!即0xffffffff但是這個數是不對的,這種補位就會造成誤差。
和0xff相與後,高24比特就會被清0了,結果就對了。

----
Java中的一個byte,其范圍是-128~127的,而Integer.toHexString的參數本來是int,如果不進行&0xff,那麼當一個byte會轉換成int時,對於負數,會做位擴展,舉例來說,一個byte的-1(即0xff),會被轉換成int的-1(即0xffffffff),那麼轉化出的結果就不是我們想要的了。

而0xff默認是整形,所以,一個byte跟0xff相與會先將那個byte轉化成整形運算,這樣,結果中的高的24個比特就總會被清0,於是結果總是我們想要的。

⑺ java如何將byte類型數組變成int類型的數組

每4個byte轉化成一個int,使用位運算,大致如下

大端序:

int[i]=byte[4*i]<<24|byte[4*i+1]<<16|byte[4*i+2]<<8|byte[4*i+3];

小端序:

int[i]=byte[4*i]|byte[4*i+1]<<8|byte[4*i+2]<<16|byte[4*i+3]<<24;
閱讀全文

與javabyte數組轉int數組相關的資料

熱點內容
仁波切pdf 瀏覽:285
linux給文件加鎖 瀏覽:324
python中進程間通信 瀏覽:932
javan替換 瀏覽:527
貪心演算法證明方法包括 瀏覽:182
人工蜂群演算法程序 瀏覽:144
單片機按鍵控制數碼管程序 瀏覽:58
深圳恆波加密軟體下載 瀏覽:130
好省的app是什麼 瀏覽:886
php加密解密軟體 瀏覽:581
程序員那麼可愛喝醉了吻 瀏覽:574
制動泵編程 瀏覽:100
套話pdf 瀏覽:287
程序員做餐飲bug 瀏覽:480
百度程序員北京 瀏覽:743
通達信漲速文件夾 瀏覽:724
十大演算法作者是誰 瀏覽:125
蘋果文件傳什麼到app 瀏覽:748
前端程序員網站 瀏覽:67
php找回密碼代碼 瀏覽:223