package com.gk.hotwork.Domain.Utils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
public class HexUtil {
|
/**
|
* 将十六进制的字符串转换成字节数组
|
*
|
* @param hexString
|
* @return
|
*/
|
public static byte[] hexStrToByteArrs(String hexString) {
|
if (StringUtils.isEmpty(hexString)) {
|
return null;
|
}
|
|
hexString = hexString.replaceAll(" ", "");
|
int len = hexString.length();
|
int index = 0;
|
|
byte[] bytes = new byte[len / 2];
|
|
while (index < len) {
|
String sub = hexString.substring(index, index + 2);
|
bytes[index / 2] = (byte) Integer.parseInt(sub, 16);
|
index += 2;
|
}
|
|
return bytes;
|
}
|
|
/**
|
* 数组转换成十六进制字符串
|
* @return HexString
|
*/
|
public static final String bytesToHexString(byte[] bArray) {
|
StringBuffer sb = new StringBuffer(bArray.length);
|
String sTemp;
|
for (int i = 0; i < bArray.length; i++) {
|
sTemp = Integer.toHexString(0xFF & bArray[i]);
|
if (sTemp.length() < 2)
|
sb.append(0);
|
sb.append(sTemp.toUpperCase());
|
// 在这里故意追加一个逗号便于最后的区分
|
sb.append(" ");
|
}
|
return sb.toString();
|
}
|
|
|
/**
|
* 字节转换为浮点
|
*
|
* @param b 字节(至少4个字节)
|
* @param index 开始位置
|
* @return
|
*/
|
public static float byte2float(byte[] b, int index) {
|
int l;
|
l = b[index + 0];
|
l &= 0xff;
|
l |= ((long) b[index + 1] << 8);
|
l &= 0xffff;
|
l |= ((long) b[index + 2] << 16);
|
l &= 0xffffff;
|
l |= ((long) b[index + 3] << 24);
|
return Float.intBitsToFloat(l);
|
}
|
|
|
/**四个字节的寄存器(十六进制),两两转成十进制,传过来之后返回浮点数**/
|
public static float GetFloat(int P1, int P2)
|
{
|
int intSign, intSignRest, intExponent, intExponentRest;
|
float faResult, faDigit;
|
intSign = P1 / 32768;
|
intSignRest = P1 % 32768;
|
intExponent = intSignRest / 128;
|
intExponentRest = intSignRest % 128;
|
faDigit = (float)(intExponentRest * 65536 + P2) / 8388608;
|
faResult = (float)Math.pow(-1, intSign) * (float)Math.pow(2, intExponent - 127) * (faDigit + 1);
|
return faResult;
|
}
|
|
|
|
|
}
|