package eVVM.apk.helper; import android.util.Log; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; /** * @Author leisurexi * @Description 进制转换工具类 * @Date 2019/6/3 19:51 */ public class ConversionUtil { /** * 十进制转换为二进制字符串 */ public static String decToBin(int number) { return Integer.toBinaryString(number); } /** * 二进制字符串转换为十进制数字 */ public static int binToDec(String number) { return Integer.valueOf(number, 2); } /** * 十进制转换为十六进制字符串 */ public static String decToHex(int number) { return Integer.toHexString(number); } /** * 十六进制字符串转十进制数字 */ public static int hexToDec(String number) { return Integer.valueOf(number, 16); } /** * 十六进字符串制转二进制字符串 * 这是单个转 */ public static String hexToBin(String number) { Integer hex = Integer.valueOf(number, 16); return Integer.toBinaryString(hex); } /** * 16进制直接转换成为16进制的字符串(无需Unicode解码) * @param hexStr 这是整个转 * @return */ public static String hexStr2Str(String hexStr) { String str = "0123456789ABCDEF"; char[] hexs = hexStr.toCharArray(); byte[] bytes = new byte[hexStr.length() / 2]; int n; for (int i = 0; i < bytes.length; i++) { n = str.indexOf(hexs[2 * i]) * 16; n += str.indexOf(hexs[2 * i + 1]); bytes[i] = (byte) (n & 0xff); } return new String(bytes); } /** * 十六进字符串制转二进制字符串 * 这是整个转 * @return 10100110000110000110000110000 */ public static String hexToBins(String hexStr) { if (hexStr.length() < 1) return null; StringBuilder result = new StringBuilder(); for (int i = 0; i < hexStr.length() / 2; i++) { String hex = String.valueOf(hexStr.charAt(i * 2)) + hexStr.charAt(i * 2 + 1); String binStr = Integer.toBinaryString(Integer.valueOf(hex, 16)); String str = ""; int shao = 8 - binStr.length(); for(int k = 0;k < shao;k++){ str = str + "0"; } binStr = str + binStr; result.append(binStr); // Log.e("----",hex); // Log.e("----",binStr); } return result.toString(); } /** * 16进制转ascii码 * 格式为 1430303030 */ public static String hexToAscii(String hex) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < hex.length() - 1; i += 2) { String output = hex.substring(i, (i + 2)); int decimal = Integer.parseInt(output, 16); char c = (char) decimal; if (c < 48 || c > 57) { continue; } sb.append(c); } return sb.toString(); } /** * 温度解密 */ public static List temperatureDecry(String[] hexNumbers) { String bins = ""; // for (int i = 0; i < hexNumbers.length; i++) { // bins += hexToBin(hexNumbers[i]); // } List result = new ArrayList<>(bins.length() / 2); for (int i = 0; i < bins.length(); i++) { if (i != 0 && i % 2 == 0) { result.add(bins.substring(i - 1, i) + bins.substring(i, i + 1)); } } return result; } }