Android-硬件数据转换温度的计算(包括零下温度)

需要得到板子传过来的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();
    }
}
发布了15 篇原创文章 · 获赞 5 · 访问量 367

猜你喜欢

转载自blog.csdn.net/weixin_44059750/article/details/103626535