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;
}
}
}
命令代码转换应用
最新推荐文章于 2022-11-05 19:35:57 发布