1. 程式人生 > >int和byte[]之間的轉換

int和byte[]之間的轉換

有時候和C的程式通訊的時候,我們在封裝協議時,可能需要將Java裡的int值,轉換成byte[]後用socket傳送。所以我們需要將32位的int值放到4位元組的byte[]裡。

/** 
 * int值轉成4位元組的byte陣列 
 * @param num 
 * @return 
 */  
public static byte[] int2byteArray(int num) {  
	byte[] result = new byte[4];  
	result[0] = (byte)(num >>> 24);//取最高8位放到0下標  
	result[1] = (byte)(num >>> 16);//取次高8為放到1下標  
	result[2] = (byte)(num >>> 8); //取次低8位放到2下標   
	result[3] = (byte)(num );      //取最低8位放到3下標  
	return result;  
}  

反過來,將4位元組的byte[]轉換成int 值:
/** 
 * 將4位元組的byte陣列轉成int值 
 * @param b 
 * @return 
 */  
public static int byteArray2int(byte[] b){  
	byte[] a = new byte[4];  
	int i = a.length - 1,j = b.length - 1;  
	for (; i >= 0 ; i--,j--) {//從b的尾部(即int值的低位)開始copy資料  
		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;  
}