package sci.utils;
/**
* 工具类-Java通讯中的类型转换
*/
public class TypeUtils {
/**
* Integer类型转换为byte数组
* @param val Integer类型值
* @return 转换后的byte数组,数组大小为4
*/
public static byte[] integer2Byte(int val) {
byte[] tmp = new byte[4];
for (int i = 0; i < tmp.length; i++) {
tmp[i] = new Integer(val).byteValue();
val = val >> 8;
}
return tmp;
}
/**
* Byte数组转换为Integer类型
* @param val 进行转换的byte数组,数组大小为4
* @return 转换后的Integer值
*/
public static int byte2Integer(byte[] val) {
int tmp = 0;
tmp = val[0];
tmp &= 0xff;
tmp |= ((int) val[1] << 8);
tmp &= 0xffff;
tmp |= ((int) val[2] << 16);
tmp &= 0xffffff;
tmp |= ((int) val[3] << 24);
tmp &= 0xffffffff;
return tmp;
}
/**
* Long类型转换为Byte类型数组
* @param val 进行转换的Long类型数据
* @return 转换后的Byte数组,长度为8
*/
public static byte[] long2Byte(long val) {
byte[] tmp = new byte[8];
for (int i = 0; i < tmp.length; i++) {
tmp[i] = new Long(val).byteValue();
val = val >> 8;
}
return tmp;
}
/**
* Byte类型数组转换为Long类型值,数组大小为8
* @param val 进行转换的Byte类型数组
* @return 转换后的Long类型数据
*/
public static long byte2Long(byte[] val) {
long tmp = 0;
tmp |= (((long) val[7] & 0xff) << 56);
tmp |= (((long) val[6] & 0xff) << 48);
tmp |= (((long) val[5] & 0xff) << 40);
tmp |= (((long) val[4] & 0xff) << 32);
tmp |= (((long) val[3] & 0xff) << 24);
tmp |= (((long) val[2] & 0xff) << 16);
tmp |= (((long) val[1] & 0xff) << 8);
tmp |= ((long) val[0] & 0xff);
return tmp;
}
/**
* Float数转换为Byte类型的数组
* @param val 进行转换的Float数据
* @return 转换后的byte数组,长度为4
*/
public static byte[] float2Byte(float val) {
byte[] tmp = new byte[4];
int l = Float.floatToIntBits(val);
for (int i = 0; i < tmp.length; i++) {
tmp[i] = new Integer(l).byteValue();
l = l >> 8;
}
return tmp;
}
/**
* Byte数组转换为Float数据,数组大小为4
* @param val 进行转换的Byte类型数组
* @return 转换后的Float数据
*/
public static float byte2Float(byte[] val) {
int tmp = 0;
tmp = val[0];
tmp &= 0xff;
tmp |= ((int) val[1] << 8);
tmp &= 0xffff;
tmp |= ((int) val[2] << 16);
tmp &= 0xffffff;
tmp |= ((int) val[3] << 24);
tmp &= 0xffffffffl;
return Float.intBitsToFloat(tmp);
}
/**
* Double数转换为Byte类型的数组
* @param val 进行转换的Double数据
* @return 转换后的byte数组,长度为8
*/
public static byte[] double2Byte(double val) {
byte[] tmp = new byte[8];
long l = Double.doubleToLongBits(val);
for (int i = 0; i < tmp.length; i++) {
tmp[i] = new Long(l).byteValue();
l = l >> 8;
}
return tmp;
}
/**
* Byte类型数组转换为Char型数组
* @param val 进行转换的Byte类型数组
* @param offset 偏移量
* @param count 进行转换个数
* @return 转换后的Char数组
*/
public static char[] bytes2Chars(byte[] val, int offset, int count) {
char tmp[] = new char[count];
for (int i = 0; i < count; i++) {
tmp[i] = (char) val[i];
}
return tmp;
}
/**
* Char类型数组转换为Byte型数组
* @param val 进行转换的Byte类型数组
* @param offset 偏移量
* @param count 进行转换个数
* @return 转换后的Char数组
*/
public static byte[] chars2Bytes(char[] val, int offset, int count) {
byte tmp[] = new byte[count];
for (int i = 0; i < count; i++) {
tmp[i] = (byte) val[i];
}
return tmp;
}
}