命令代码转换应用

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;
		}
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值