需要得到板子传过来的16进制转换为温度,之前只是正温度的转换,现在可以进行正负温度都可以进行转换,下面是工具类
public class TemUtils {
private static String newRem;
private static String newHead;
private static StringBuffer stringBuffer = new StringBuffer();
/**
* @param rem 16进制
* @return
*/
public static String judge(String rem){
String number = getRem(rem);
String newNumber = number.substring(0,1);
if (newNumber.equals("0")){
int ten = Integer.parseInt(number, 2);
String newTen = String.valueOf(ten);
return newTen;
}else {
String newNum = number.substring(1,number.length());
int newNumLength = newNum.length();
for (int i = 0; i < newNumLength; i++){
String substring = newNum.substring(0, 1);
if (substring.equals("0")){
newNum = newNum.substring(1,newNum.length());
stringBuffer.append("1");
}else {
newNum = newNum.substring(1,newNum.length());
stringBuffer.append("0");
}
}
String newStringBuffer = "1" + String.valueOf(stringBuffer);
String sum = TemUtils.add(newStringBuffer, "00000001");
String newSum = sum.substring(1,sum.length());
int newTen = Integer.parseInt(newSum, 2);
String finalTen = "-" + String.valueOf(newTen);
return finalTen;
}
}
/**
* 将16进制转换为2进制并补位
* @param rem
* @return
*/
public static String getRem(String rem){
int ten = Integer.parseInt(rem, 16);
String bin = Integer.toBinaryString(ten);
int remLength = bin.length();
if (remLength >= 8){
int i = remLength % 8;
if (i != 0){
newHead = String.valueOf(bin);
for (int a = 0; a < i;a++){
newHead = "0" + newHead;
}
newRem = newHead;
}else {
newRem = String.valueOf(bin);
}
}else {
int i = 8 % remLength;
if (i != 0){
newHead = String.valueOf(bin);
for (int a = 0; a < i;a++){
newHead = 0 + newHead;
}
newRem = newHead;
}else {
newRem = String.valueOf(bin);
}
}
return newRem;
}
/**
* 将两个二进制进行相加
* @param b1
* @param b2
* @return
*/
public static String add(String b1, String b2) {
int len1 = b1.length();
int len2 = b2.length();
String s1 = b1;
String s2 = b2;
StringBuffer sb1 = new StringBuffer();
//先将位数较少的二进制高位补零
if(len1 > len2) {
for(int i = 0; i < (len1 - len2); i++) {
sb1.append(0);
}
sb1.append(b2);
s1 = b1;
s2 = sb1.toString();
} else if(len1 < len2) {
for(int j = 0; j < (len2 - len1); j++) {
sb1.append(0);
}
sb1.append(b1);
s1 = sb1.toString();
s2 = b2;
}
//进位
int flag = 0;
StringBuffer sb2 = new StringBuffer();
for(int z = s1.length() - 1; z >= 0; z--) {
//字符’0’的对应的ASCII十进制是48
//分情况判断
if((s1.charAt(z) - 48) == 0 && (s2.charAt(z) - 48) == 0) {
sb2.append(flag);
flag = 0;
continue;
}
if(((s1.charAt(z) - 48) == 0 && (s2.charAt(z) - 48) == 1 && flag == 0) || ((s1.charAt(z) - 48) == 1 && (s2.charAt(z) - 48) == 0 && flag == 0)) {
sb2.append(1);
flag = 0;
continue;
}
if(((s1.charAt(z) - 48) == 0 && (s2.charAt(z) - 48) == 1 && flag == 1) || ((s1.charAt(z) - 48) == 1 && (s2.charAt(z) - 48) == 0 && flag == 1)) {
sb2.append(0);
flag = 1;
continue;
}
if((s1.charAt(z) - 48) == 1 && (s2.charAt(z) - 48) == 1 && flag == 0) {
sb2.append(0);
flag = 1;
continue;
}
if((s1.charAt(z) - 48) == 1 && (s2.charAt(z) - 48) == 1 && flag == 1) {
sb2.append(1);
flag = 1;
}
}
if(flag == 1) {
sb2.append(flag);
}
//倒置
sb2.reverse();
return sb2.toString();
}
}