byte轉intjava
㈠ java byte類型是如何自動轉換成int類型的
b的代碼是0xf1,既是11110001
然後轉換成int, 變為11111111 11111111 11111111 11110001 一共是32位
然後b>>>4, 然後變為11111111 11111111 11111111 11111111
d是byte型,然後截斷,內變為111111111
希望能容幫到你~!
㈡ java中byte[]轉換成int
java中byte轉換為 int有兩種情況,一種是要求保持值不變,例如進行數值計算,內可採用強制類型轉換容:int i = (int) aByte;
另一種是要求保持最低位元組中各個位不變,3個高位元組全部用0填充,例如進行編解碼操作,
則需要採用位操作:int i = b & 0xff;
int InputStream.read()
該函數返回一個int類型,范圍從0至255,如果到達流末尾,返回-1。通過ByteArrayInputStream的源碼可以看到是如何從byte轉到int
public synchronized int read() {
return (pos < count) ? (buf[pos++] & 0xff) : -1;
}
注意,不是自動轉的,需要強製做處理。
㈢ 求java編程 位元組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[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數組
public class ByteUtil {
/**
* 將 Little-Endian 的位元組數組轉為 int 類型的數據<br />
* Little-Endian 表示高位位元組在高位索引中
* @param bys 位元組數組
* @param start 需要轉換的開始索引位數
* @param len 需要轉換的位元組數量
* @return 指定開始位置和長度以 LE 方式表示的 int 數值
*/
public static int bytes2IntLE(byte[] bys, int start, int len) {
return bytes2Int(bys, start, len, false);
}
public static int bytes2IntLE(byte[] bys) {
return bytes2Int(bys, 0, bys.length, false);
}
/**
* 將 Big-Endian 的位元組數組轉為 int 類型的數據<br />
* Big-Endian 表示高位位元組在低位索引中
* @param bys 位元組數組
* @param start 需要轉換的開始索引位數
* @param len 需要轉換的位元組數量
* @return 指定開始位置和長度以 BE 方式表示的 int 數值
*/
public static int bytes2IntBE(byte[] bys, int start, int len) {
return bytes2Int(bys, start, len, true);
}
public static int bytes2IntBE(byte[] bys) {
return bytes2Int(bys, 0, bys.length, true);
}
/**
* 將位元組數組轉為 Java 中的 int 數值
* @param bys 位元組數組
* @param start 需要轉換的起始索引點
* @param len 需要轉換的位元組長度
* @param isBigEndian 是否是 BE(true -- BE 序,false -- LE 序)
* @return
*/
private static int bytes2Int(byte[] bys, int start, int len,
boolean isBigEndian) {
int n = 0;
for(int i = start, k = start + len % (Integer.SIZE / Byte.SIZE + 1); i < k; i++) {
n |= (bys[i] & 0xff) << ((isBigEndian ? (k - i - 1) : i) * Byte.SIZE);
}
return n;
}
}
㈥ 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;
㈦ JAVA 請問兩個位元組的byte比如[1,0],如何轉成int
byte是8位的,int是32位的,所以要4個byte轉成一個int,你的例子里只有兩位,就要再在高位補兩位0,就可以轉了。下面是一個通用轉換的代碼
/**
*4位位元組數組轉換為整型
*@paramb
*@return
*/
publicstaticintbyte2Int(byte[]b){
intintValue=0;
for(inti=0;i<b.length;i++){
intValue+=(b[i]&0xFF)<<(8*(3-i));
}
returnintValue;
}
調用的時候傳入一個byte[]數組,順序是從高到低傳入byte對應位置
代碼的意思就是高位的左移24位,最低位的保持原位不動。
㈧ 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中int如何轉換byte
因為在java中,int類型的佔4個位元組,而byte佔1個位元組,所以int類型轉化為byte類型時會出現位丟失情況,即將int的低8位作為byte類型的值。int型變數的值為257,對應的二進制是100000001,後8位是00000001,第一個0表示符號位,表示正數,所以變數x的值為1。
㈩ java如何將byte[4]數組轉換成一個int型數據
byte[] bs = new byte[4];
bs[0] = 1;
bs[1] = 2;
bs[2] = 3;
bs[3] = 4;
int r = 0;
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream();
//連接管道
pis.connect(pos);
DataInputStream dis = new DataInputStream(pis);
DataOutputStream dos = new DataOutputStream(pos);
//先寫4個位元組
dos.write(bs,0,bs.length);
//讀取整型
r = dis.readInt();
System.out.println(r);
dis.close();
dos.close();