下令代码转换应用
命令代码转换应用
package com.whjnkj.common.cmdCodeConvert; public class CMDCodeConvert { /** * (转换)把传入的十进制数值转换为八位十六进制的命令代码(转换) * * @param value * @return */ public static String floatToIntBitsToHexCMDCode(float value){ String returnString=null; if(value==0){ returnString= "00000000"; } else { int aa=Float.floatToIntBits(value); String aaa= Integer.toHexString(aa); StringBuffer sb= new StringBuffer(); String b1=aaa.substring(0, 2); String b2=aaa.substring(2, 4); String b3=aaa.substring(4, 6); String b4=aaa.substring(6, 8); sb.append(b4); sb.append(b3); sb.append(b2); sb.append(b1); String bb=sb.toString(); bb=bb.toUpperCase(); returnString=bb; } return returnString; } /** * (解析)把传入的八位十六进制命令数值代码 转化为十进制数值(解析) * @param value * @return */ public static Float intBitsToDecToFloatCMDCode(String value){ Float returnNum=null; if(value.length()==8){ String bb = value; StringBuffer sb2 = new StringBuffer(); String c1 = bb.substring(0, 2); String c2 = bb.substring(2, 4); String c3 = bb.substring(4, 6); String c4 = bb.substring(6, 8); sb2.append(c4); sb2.append(c3); sb2.append(c2); sb2.append(c1); String cc = sb2.toString(); int zf=1; String zf1 = cc.substring(0, 1); if(zf1.equals("C")){ zf=-1; StringBuffer sb=new StringBuffer(); sb.append("4"); sb.append(cc.substring(1)); cc=sb.toString(); } int ddd =Integer.valueOf(cc, 16); float dd = Float.intBitsToFloat(ddd); returnNum=dd*zf; } return returnNum; } /** * (转换)把传入的十进制数值转换为四位的命令代码(转换) * * 传入一个float类型的数字 转化为vvxx的字符 vv为小数位 的 十六进制 xx为整数位 的 十六进制 * 小数位如果只有一位十进制 比如:9 ,则变成90后再转换为16进制 * 如果此数是正数: * 整数位转换成16进制以后如果只有一位 则前面加0 * 小数位如果转换成16进制以后 如果只有一位 则前面加0 * 传入数值如果是负数: * 整数位转换成16进制以后如果只有一位 则前面加0 * 小数位在10进制的时候,小数位如果只有一位十进制 比如:9 ,则变成90,而后+128而后再转换成16进制 * @param value * @return */ public static String floatToHexToCMDCode(float valueIns) { if(valueIns>=-255.99&& valueIns<=255.99){ int negtive=0; if(valueIns<0){ negtive=1; } float value = Math.abs(valueIns); // 取得小数和整数部分的数字 // 传入数值转化为字符 String preString = String.valueOf(value); // 整数部分 String preintPart = null; // 小数部分 String prefloPatr = null; int index = preString.indexOf('.'); if (index != -1) { preintPart = preString.substring(0, index); prefloPatr = preString.substring(index + 1); } else { preintPart = preString; prefloPatr = "0"; } // 如果小数位只有一位 要在后面加0后再转换为16进制 if (prefloPatr.length() == 1) { StringBuffer sb2 = new StringBuffer(); sb2.append(prefloPatr); sb2.append("0"); prefloPatr = sb2.toString(); } //传入数值如果是负数 小数位加0后的十进制数要+128后再转换为16进制 if(negtive==1){ int floIn = Integer.parseInt(prefloPatr); int floNegConv = floIn+128; prefloPatr=String.valueOf(floNegConv); } // 转换为十六进制 整数位 String preStrIntPart = Integer .toHexString(Integer.parseInt(preintPart)); // 转换为十六进制 小数位 String preStrFloatPart = Integer.toHexString(Integer .parseInt(prefloPatr)); // 检验转化后的数字位数如果只有 一位的 前面加0 if (preStrIntPart.length() == 1) { StringBuffer sb = new StringBuffer(); sb.append("0"); sb.append(preStrIntPart); preStrIntPart = sb.toString(); } if (preStrFloatPart.length() == 1) { StringBuffer sb1 = new StringBuffer(); sb1.append("0"); sb1.append(preStrFloatPart); preStrFloatPart = sb1.toString(); } // 小数位和整数位连接 StringBuffer sb = new StringBuffer(); sb.append(preStrFloatPart); sb.append(preStrIntPart); String pressValueHexforCMD = sb.toString(); pressValueHexforCMD=pressValueHexforCMD.toUpperCase(); return pressValueHexforCMD; } else{ return null; } } /** * (解析)把传入的四位十六进制命令数值代码 转化为十进制数值(解析) * * @param hexValue * @return */ public static Float convertHexCmdValuetoDecValue(String hexValue){ if (hexValue.length() == 4) { int neg = 1; // 十六进制 小数位 String floPartHex = hexValue.substring(0, 2); // 十六进制整数位 String intPartHex = hexValue.substring(2); // 十进制小数位 String floPartDecStr = Integer.valueOf(floPartHex, 16).toString(); // 如果小数位的数值大于等于128说明这个数是负数 int floVal = Integer.parseInt(floPartDecStr); if (floVal >= 128) { floVal = floVal - 128; floPartDecStr = String.valueOf(floVal); neg = -1; } // 判断小数位是几位 而后转化 if (floPartDecStr.length() == 1) { StringBuffer sb1 = new StringBuffer(); sb1.append("0.0"); sb1.append(floPartDecStr); floPartDecStr = sb1.toString(); } else if (floPartDecStr.length() > 1) { StringBuffer sb1 = new StringBuffer(); sb1.append("0."); sb1.append(floPartDecStr); floPartDecStr = sb1.toString(); } // 十进制小数 float floPartDec = Float.parseFloat(floPartDecStr); // 十进制整数 int intPartDec = Integer.valueOf(intPartHex, 16); // 加合成一个数 float retValue = floPartDec + intPartDec; retValue = retValue * neg; return retValue; } else { return null; } } /** * (解析)把传入的两位十六进制命令数值代码 转化为十进制数值(解析) * * @param hexValue * @return */ public static Float convertHexCmdValuetoDecValueTwo(String intPartHex){ if (intPartHex.length() == 2) { int neg = 1; // 十进制整数 int intPartDec = Integer.valueOf(intPartHex, 16); // 加合成一个数 float retValue = intPartDec; retValue = retValue * neg; return retValue; } else { return null; } } }