一個處理BYTE和其他類型轉換的類:
public class Tools{
//16進制
private static String HexCode[] = {
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"a", "b", "c", "d", "e", "f"
};
private Tools(){
}
//將byte類型轉換爲16進制字符串
public static String byteToHexString(byte b){
int n = b;
if(n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return HexCode[d1]+HexCode[d2];
}
//將byte數組轉換爲16進制字符串
public static String byteArrayToHexString(byte b[]){
String result = "";
for(int i = 0; i < b.length; i++)
result = result+byteToHexString(b[i]);
return result;
}
//將byte數組第offset個元素起的4個字節轉換爲int值
public static int byte2int(byte b[], int offset)
{
return b[offset + 3] & 0xff | (b[offset + 2] & 0xff) << 8 | (b[offset + 1] & 0xff) << 16 | (b[offset] & 0xff) << 24;
}
//將byte數組轉換爲int值
public static int byte2int(byte b[])
{
return b[3] & 0xff | (b[2] & 0xff) << 8 | (b[1] & 0xff) << 16 | (b[0] & 0xff) << 24;
}
//將byte數組轉爲long值
public static long byte2long(byte b[])
{
return (long)b[7] & (long)255 | ((long)b[6] & (long)255) << 8 | ((long)b[5] & (long)255) << 16 | ((long)b[4] & (long)255) << 24 | ((long)b[3] & (long)255) << 32 | ((long)b[2] & (long)255) << 40 | ((long)b[1] & (long)255) << 48 | (long)b[0] << 56;
}
//將byte數組第offset個元素起的8個字節轉爲long值
public static long byte2long(byte b[], int offset)
{
return (long)b[offset + 7] & (long)255 | ((long)b[offset + 6] & (long)255) << 8 | ((long)b[offset + 5] & (long)255) << 16 | ((long)b[offset + 4] & (long)255) << 24 | ((long)b[offset + 3] & (long)255) << 32 | ((long)b[offset + 2] & (long)255) << 40 | ((long)b[offset + 1] & (long)255) << 48 | (long)b[offset] << 56;
}
//將int類型轉爲byte數組
public static byte[] int2byte(int n)
{
byte b[] = new byte[4];
b[0] = (byte)(n >> 24);
b[1] = (byte)(n >> 16);
b[2] = (byte)(n >> 8);
b[3] = (byte)n;
return b;
}
/**
*n 爲待轉數據,buf[]爲轉換後的數據,offset爲buf[]中轉換的起始點
* 轉換後數據從低到高位
*/
public static void int2byte(int n, byte buf[], int offset)
{
buf[offset] = (byte)(n >> 24);
buf[offset + 1] = (byte)(n >> 16);
buf[offset + 2] = (byte)(n >> 8);
buf[offset + 3] = (byte)n;
}
public static byte[] short2byte(int n)
{
byte b[] = new byte[2];
b[0] = (byte)(n >> 8);
b[1] = (byte)n;
return b;
}
public static void short2byte(int n, byte buf[], int offset)
{
buf[offset] = (byte)(n >> 8);
buf[offset + 1] = (byte)n;
}
public static byte[] long2byte(long n)
{
byte b[] = new byte[8];
b[0] = (byte)(int)(n >> 56);
b[1] = (byte)(int)(n >> 48);
b[2] = (byte)(int)(n >> 40);
b[3] = (byte)(int)(n >> 32);
b[4] = (byte)(int)(n >> 24);
b[5] = (byte)(int)(n >> 16);
b[6] = (byte)(int)(n >> 8);
b[7] = (byte)(int)n;
return b;
}
public static void long2byte(long n, byte buf[], int offset)
{
buf[offset] = (byte)(int)(n >> 56);
buf[offset + 1] = (byte)(int)(n >> 48);
buf[offset + 2] = (byte)(int)(n >> 40);
buf[offset + 3] = (byte)(int)(n >> 32);
buf[offset + 4] = (byte)(int)(n >> 24);
buf[offset + 5] = (byte)(int)(n >> 16);
buf[offset + 6] = (byte)(int)(n >> 8);
buf[offset + 7] = (byte)(int)n;
}
}
*************************************************************************************
byte[] b = {00,00,00,00};
int i = ((b[0] << 24) + (b[1] << 16) + (b[2] << 8) + (b[3] << 0));
System.out.println(i);
System.out.println(Integer.parseInt(new String(b,0,4)));
結果:
都是由BYTE[]轉換爲INT,但
第一條打印語句得到結果:0
第二條出錯,因爲new String(b,0,4)爲" "
原因如下:
(1)每四個byte可轉換成一個int,因爲int=4 byte
取出4個byte
int i = (int)b[0] | ((int)b[1] << 8) | ((int)b[2] << 16) | ((int)b[3] << 24);
上面用的是+
(2)0轉換爲字符串是/0,把二進制零轉不成字符串的,因爲/0是不可見的