/**
* 十六进制的字符串转换为byte数组
* **/
public static byte[] hexStringToByte(String data)
{
data = data.replace(" ", "");
if(1==data.length()%2)
return null;
else{
byte[] li = new byte[data.length()/2];
for (int i = 0; i < data.length(); i+=2) {
int cp1 = data.codePointAt(i);
int cp2 = data.codePointAt(i+1);
li[i/2] = (byte)(asc2Hex(cp1)<<4|asc2Hex(cp2));
}
return li;
}
}
/**
* 字节数组转float
* 采用IEEE 754标准
* @param bytes
* @return
*/
public static float bytes2Float(byte[] bytes){
BigInteger bi = new BigInteger(com.collectctrl.util.Tools.byteToHexStr(bytes), 16);
Long data = bi.longValue();
int nSign;
//获取最高位 1bit S
if((data&0x80000000)>0){
nSign = -1;
}else{
nSign = 1;
}
//获取 8bit E
Long nExp = data & (0x7f800000);
nExp = nExp >> 23;
//获取尾数 23bit M
float nMantissa = data & (0x7fffff);
if(nMantissa != 0){
nMantissa = 1 + nMantissa/8388608;
}
float v = (float) (nSign * nMantissa * Math.pow(2, (nExp - 127)));//(2 << (nExp - 128));
return v;
}