1、接收到16进制温度报文,判断有没有FF,如果有FF说明这个16进制温度是一个负值温度;
byte a=**接收的温度16进制字节
String val = Integer.toHexString(a & 0xFF);
2、if判断是否包含ff;
if(val.equals("ff"))
3、如果不包含ff,直接将16进制转10进制;
Integer.parseInt(数值, 16)
4、如果包含ff,先将16进制转10进制,再将10进制转2进制,再反转,再加1,再2进制转换为10进制;
public static String hex2binary(String val) {
//16进制转10进制
BigInteger sint = new BigInteger(val, 16);
//10进制转2进制
String result = sint.toString(2);
return result;
}
5、再反转加1;将hex2binary方法返回值接收到,再调用ICode方法进行反转。
public static String ICode(String val){
StringBuilder sr = new StringBuilder(val);
for (int i = 0; i < sr.length(); i++) {
if (sr.substring(i,i+1).equals("0")){
sr.replace(i,i+1,"1");
}else{
sr.replace(i,i+1,"0");
}
}
return sr.toString();
}
6、再将2进制转换为10进制,得出负值。
Integer.parseInt(传入ICode方法返回的2进制结果,2)