当前位置: 首页 > news >正文

java 二进制数字符串转换工具类

java 二进制数字符串转换工具类

 

  • 将二进制转换成八进制
  • 将二进制转换成十进制
  • 将二进制转换成十六进制
  • 将十进制转换成二进制

 

package com.iteye.injavawetrust.ad;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 二进制转换工具类
 * <ul>
 * <li>将二进制转换成八进制</li>
 * <li>将二进制转换成十进制</li>
 * <li>将二进制转换成十六进制</li>
 * <li>将十进制转换成二进制</li>
 * </ul>
 * 
 * @author InJavaWeTrust
 */
public class BinaryUtil {
	
	/**
	 * 将二进制整数部分转换成十进制
	 * @param inteter 二进制整数部分字符串
	 * @return 转换后的十进制数值
	 */
	public static int binaryIntToDecimalism(String inteter) {
		int inteterSum = 0;
		for (int i = inteter.length(); i > 0; i--) {
			int scale = 2;
			if (inteter.charAt(-(i - inteter.length())) == '1') {
				if (i != 1) {
					for (int j = 1; j < i - 1; j++) {
						scale *= 2;
					}
				} else {
					scale = 1;
				}
			} else {
				scale = 0;
			}
			inteterSum += scale;
		}
		return inteterSum;
	}
	
	/**
	 * 将二进制小数部分转换成十进制
	 * @param decimals 二进制小数部分字符串
	 * @return 转换后的十进制数值
	 */
	public static double binaryDecToDecimalism(String decimals) {
		double decimalsSum = 0f;
		for (int i = 0; i < decimals.length(); i++) {
			double scale = 2;
			if (decimals.charAt(i) == '1') {
				if (i == 0) {
					scale = 1 / scale;
				} else {
					for (int j = 1; j <= i; j++) {
						scale *= 2;
					}
					scale = 1 / scale;
				}
			} else {
				scale = 0;
			}
			decimalsSum += scale;
		}
		return decimalsSum;
	}

	/**
	 * 将二进制转换成十进制
	 * @param binary 二进制字符串
	 * @return 转换后的十进制字符串
	 */
	public static String binaryToDecimalism(String binary) {
		String sum = "";
		String integer = "";     // 整数部分
		String decimals = "";    // 小数部分
		int integerSum = 0;      // 整数部分和
		double decimalsSum = 0d; // 小数部分和
		if (BinaryUtil.isBinary(binary)) {
			if (BinaryUtil.isContainsPoint(binary)) {
				integer = binary.substring(0, binary.indexOf("."));
				decimals = binary.substring(binary.indexOf(".") + 1,
						binary.length());
				integerSum = BinaryUtil.binaryIntToDecimalism(integer);
				decimalsSum = BinaryUtil.binaryDecToDecimalism(decimals);
				sum = String.valueOf(integerSum + decimalsSum);
			} else {
				integerSum = BinaryUtil.binaryIntToDecimalism(binary);
				sum = String.valueOf(integerSum);
			}
		} else {
			try {
				throw new IllegalBinaryException(binary + " Illegal binary!");
			} catch (IllegalBinaryException be) {
				System.out.println(be.getMessage());
			}
		}
		return sum;
	}
	
	/**
	 * 将二进制整数部分转换成八进制
	 * @param integer 二进制字符串
	 * @return 转换后的八进制字符串
	 */
	public static String binaryIntToOctal(String integer) {
		StringBuilder integerSum = new StringBuilder();
		int loop = 0; // 循环次数
		if (integer.length() % 3 == 0) {
			loop = integer.length() / 3;
		} else {
			loop = integer.length() / 3 + 1;
		}
		String binary = "";
		for (int i = 1; i <= loop; i++) {
			if (i != loop) {
				binary = integer.substring(integer.length() - i * 3,
						integer.length() - i * 3 + 3);
			} else {
				binary = BinaryUtil.appendZero(
						integer.substring(0, integer.length() - (i - 1) * 3),
						3, true);
			}
			integerSum.append(BinaryUtil.binaryIntToDecimalism(binary));
		}
		return integerSum.reverse().toString();
	}
	
	/**
	 * 将二进制小数部分转换成八进制
	 * @param xs 二进制字符串
	 * @return 转换后的八进制字符串
	 */
	public static String binaryDecToOctal(String decimals) {
		StringBuilder decimalsSum = new StringBuilder();
		int loop = 0; // 循环次数
		if (decimals.length() % 3 == 0) {
			loop = decimals.length() / 3;
		} else {
			loop = decimals.length() / 3 + 1;
		}
		String binary = "";
		for (int i = 1; i <= loop; i++) {
			if (i != loop) {
				binary = decimals.substring(3 * (i - 1), 3 * (i - 1) + 3);
			} else {
				binary = BinaryUtil.appendZero(decimals.substring(3 * (i - 1)),
						3, false);
			}
			decimalsSum.append(BinaryUtil.binaryIntToDecimalism(binary));
		}
		return decimalsSum.toString();
	}
	
	/**
	 * 将二进制转换成八进制
	 * @param binary 二进制字符串
	 * @return 转换后的八进制字符串
	 */
	public static String binaryToOctal(String binary) {
		String integer = "";
		String point = "";
		String decimals = "";
		String integerSum = "";
		String decimalsSum = "";
		if (BinaryUtil.isBinary(binary)) {
			if (BinaryUtil.isContainsPoint(binary)) {
				integer = binary.substring(0, binary.indexOf("."));
				point = ".";
				decimals = binary.substring(binary.indexOf(".") + 1,
						binary.length());
				integerSum = BinaryUtil.binaryIntToOctal(integer);
				decimalsSum = BinaryUtil.binaryDecToOctal(decimals);
			} else {
				integerSum = BinaryUtil.binaryIntToOctal(binary);
			}
		} else {
			try {
				throw new IllegalBinaryException(binary + " Illegal binary!");
			} catch (IllegalBinaryException be) {
				System.out.println(be.getMessage());
			}
		}
		StringBuilder sum = new StringBuilder();
		sum = sum.append(integerSum).append(point).append(decimalsSum);
		return sum.toString();
	}
	
	/**
	 * 将二进制整数部分转换成十六进制
	 * @param integer 二进制整数部分字符串
	 * @return 转换后的十六进制字符串
	 */
	public static String binaryIntToHexadecimal(String integer) {
		StringBuffer integerSum = new StringBuffer();
		int loop = 0; // 循环次数
		if (integer.length() % 4 == 0) {
			loop = integer.length() / 4;
		} else {
			loop = integer.length() / 4 + 1;
		}
		String binary = "";
		for (int i = 1; i <= loop; i++) {
			if (i != loop) {
				binary = integer.substring(integer.length() - i * 4,
						integer.length() - i * 4 + 4);
			} else {
				binary = BinaryUtil.appendZero(
						integer.substring(0, integer.length() - (i - 1) * 4),
						4, true);
			}
			integerSum.append(BinaryUtil.toHex(String.valueOf(BinaryUtil
					.binaryIntToDecimalism(binary))));
		}
		return integerSum.reverse().toString();
	}
	
	/**
	 * 将二进制小数部分转换成十六进制
	 * @param xs 二进制字符串
	 * @return 转换后的十六进制字符串
	 */
	public static String binaryDecToHexadecimal(String decimals) {
		StringBuffer decimalsSum = new StringBuffer();
		int loop = 0;
		if (decimals.length() % 3 == 0) {
			loop = decimals.length() / 3;
		} else {
			loop = decimals.length() / 3 + 1;
		}
		String binary = "";
		for (int i = 1; i <= loop; i++) {
			if (i != loop) {
				binary = decimals.substring(4 * (i - 1), 4 * (i - 1) + 4);
			} else {
				binary = BinaryUtil.appendZero(decimals.substring(4 * (i - 1)),
						4, false);
			}
			decimalsSum.append(BinaryUtil.toHex(String.valueOf(BinaryUtil
					.binaryIntToDecimalism(binary))));
		}
		return decimalsSum.toString();
	}
	
	/**
	 * 将二进制转换成十六进制
	 * @param binary 二进制字符串
	 * @return 转换后的十六进制字符串
	 */
	public static String binaryToHexadecimal(String binary) {
		String integer = "";
		String point = "";
		String decimals = "";
		String integerSum = "";
		String decimalsSum = "";
		if (BinaryUtil.isBinary(binary)) {
			if (BinaryUtil.isContainsPoint(binary)) {
				integer = binary.substring(0, binary.indexOf("."));
				point = ".";
				decimals = binary.substring(binary.indexOf(".") + 1,
						binary.length());
				integerSum = BinaryUtil.binaryIntToHexadecimal(integer);
				decimalsSum = BinaryUtil.binaryDecToHexadecimal(decimals);
			} else {
				integerSum = BinaryUtil.binaryIntToHexadecimal(binary);
			}
		} else {
			try {
				throw new IllegalBinaryException(binary + " Illegal binary!");
			} catch (IllegalBinaryException be) {
				System.out.println(be.getMessage());
			}
		}
		StringBuilder sum = new StringBuilder();
		sum = sum.append(integerSum).append(point).append(decimalsSum);
		return sum.toString();
	}
	
	/**
	 * 将十进制整数部分转换成二进制
	 * @param integer 十进制整数部分
	 * @return 转换后的二进制
	 */
	public static String decimalismIntToBinary(String integer) {
		return Integer.toBinaryString(Integer.parseInt(integer)).toString();
	}
	
	/**
	 * 将十进制小数部分转换成二进制
	 * @param sxs 十进制整小数部分
	 * @return 转换后的二进制
	 */
	public static String decimalismDecToBinary(String decimals) {
		String pre = "0.";
		String all = pre + decimals;
		String sum = "";
		double dou = Double.parseDouble(all);
		while (!String.valueOf(dou).equals("0.0")) {
			dou = dou * 2;
			sum += String.valueOf(dou).substring(0,
					String.valueOf(dou).indexOf("."));
			dou = Double.parseDouble("0."
					+ String.valueOf(dou).substring(
							String.valueOf(dou).indexOf(".") + 1));
		}
		return sum;
	}
	
	/**
	 * 将十进制转换成二进制
	 * @param decimalism 十进制数字符串
	 * @return 转换后的二进制数字符串
	 */
	public static String decimalismToBinary(String decimalism) {
		String binary = "";
		String point = "";
		String integer = "";
		String decimals = "";
		if (BinaryUtil.isNumber(decimalism)) {
			if (BinaryUtil.isContainsPoint(decimalism)) {
				integer = decimalism.substring(0, decimalism.indexOf("."));
				integer = BinaryUtil.decimalismIntToBinary(integer);
				point = ".";
				decimals = decimalism.substring(decimalism.indexOf(".") + 1);
				decimals = BinaryUtil.decimalismDecToBinary(decimals);
			} else {
				integer = BinaryUtil.decimalismIntToBinary(decimalism);
			}
		} else {
			try {
				throw new IllegalNumberException(decimalism
						+ " Illegal number!");
			} catch (IllegalNumberException be) {
				System.out.println(be.getMessage());
			}
		}
		binary = integer + point + decimals;
		return binary;
	}
	
	/**
	 * 将10~15转换成A~F
	 * @param binary 十六进制字符串
	 * @return 转换后的十六进制数值
	 */
	public static String toHex(String hex) {
		String str = "";
		switch(Integer.parseInt(hex)){
		case 10 : str = "A"; break;
		case 11 : str = "B"; break;
		case 12 : str = "C"; break;
		case 13 : str = "D"; break;
		case 14 : str = "E"; break;
		case 15 : str = "F"; break;
		default : str = hex;
		}
		return str;
	}
	
	/**
	 * 根据补位标志将源字符串补位到指定长度
	 * @param str 源字符串
	 * @param len 补位到指定长度
	 * @param flag 补位标志 true-左补;false-右补
	 * @return 补位后的字符串
	 */
	public static String appendZero(String str, int len, boolean flag) {
		String zero = "0";
		if (null == str || str.length() == 0) {
			return "";
		}
		if (str.length() >= len) {
			return str;
		}
		for (int i = str.length(); i < len; i++) {
			if (flag) {
				str = zero + str;
			} else {
				str += zero;
			}
		}
		return str;
	}
	
	/**
	 * 是否合法二进制字符串
	 * @param binary 二进制字符串
	 * @return true-合法;false-不合法
	 */
	public static boolean isBinary(String binary) {
		boolean flag = true;
		if (binary.contains(".")) {
			if (binary.lastIndexOf(".") + 1 == binary.length()) {
				return false;
			} else if (binary.indexOf(".") == 0) {
				return false;
			}
			char[] c = binary.toCharArray();
			int sum = 0;
			for (int i = 0; i < c.length; i++) {
				if (c[i] == '.') {
					sum += 1;
				} else {
					if (c[i] != '0' && c[i] != '1') {
						return false;
					}
				}
				if (sum > 1) {
					return false;
				}
			}
		} else {
			char[] c = binary.toCharArray();
			for (int i = 0; i < c.length; i++) {
				if (c[i] != '0' && c[i] != '1') {
					return false;
				}
			}
		}
		return flag;
	}
	
	/**
	 * 是否包含小数点
	 * @param number 字符串
	 * @return true-包含;false-不包含
	 */
	public static boolean isContainsPoint(String number) {
		return number.contains(".") ? true : false;
	}
	
	/**
	 * 判断是否数字
	 * @param number 要判断的数字 
	 * @return true-数字;false-非数字
	 */
	public static boolean isOToN(String number) {
		Pattern p = Pattern.compile("\\d");
		Matcher m = p.matcher(number);
		return m.matches();
	}
	
	/**
	 * 判断是否是一个合法的数字
	 * @param number 要判断是数字
	 * @return true-合法数字;false-非法数字
	 */
	public static boolean isNumber(String number) {
		boolean flag = true;
		if (number.contains(".")) {
			if (number.lastIndexOf(".") + 1 == number.length()) {
				return false;
			} else if (number.indexOf(".") == 0) {
				return false;
			}
			char[] c = number.toCharArray();
			int sum = 0;
			for (int i = 0; i < c.length; i++) {
				if (c[i] == '.') {
					sum += 1;
				} else {
					if (!BinaryUtil.isOToN(String.valueOf(c[i]))) {
						return false;
					}
				}
				if (sum > 1) {
					return false;
				}
			}
		} else {
			char[] c = number.toCharArray();
			for (int i = 0; i < c.length; i++) {
				if (!BinaryUtil.isOToN(String.valueOf(c[i]))) {
					return false;
				}
			}
		}
		return flag;
	}

	
	public static void main(String[] args) throws Exception {
		String binary = "110011";
		System.out.println(BinaryUtil.binaryToDecimalism(binary));
		System.out.println(BinaryUtil.binaryToOctal(binary));
		System.out.println(BinaryUtil.binaryToHexadecimal(binary));
		String integer = "51";
		System.out.println(BinaryUtil.decimalismToBinary(integer));
		
		String bin = "101011.101";
		System.out.println(BinaryUtil.binaryToDecimalism(bin));
		System.out.println(BinaryUtil.binaryToOctal(bin));
		System.out.println(BinaryUtil.binaryToHexadecimal(bin));
		String inte = "43.625";
		System.out.println(BinaryUtil.decimalismToBinary(inte));
	}
}

 

 

package com.iteye.injavawetrust.ad;

/**
 * 非法的数字异常类
 * 
 * @author InJavaWeTrust
 */
public class IllegalNumberException extends Exception{
	private static final long serialVersionUID = 1L;
	public IllegalNumberException(){
		
	}
	public IllegalNumberException(String message){
		super(message);
	}
}

 

 

 

package com.iteye.injavawetrust.ad;

/**
 * 非法的二进制数异常类
 * 
 * @author InJavaWeTrust
 */
public class IllegalBinaryException extends Exception{
	private static final long serialVersionUID = 1L;
	public IllegalBinaryException(){
		
	}
	public IllegalBinaryException(String message){
		super(message);
	}
}

 

 

 

 

转载于:https://www.cnblogs.com/muyuge/p/6152067.html

相关文章:

  • 逻辑数据库设计 - 单纯的树(递归关系数据)
  • web storage 之留言板
  • tablib.Dataset()操作exl类型数据之“类方法”研究
  • 用自己的机器人和ubuntu PC实现通信和控制--26
  • Ubuntu计算文件md5值命令
  • Maven Dependency Scope用法
  • 结对编写四则运算
  • Appium 一个测试套件多次启动android应用
  • zookeeper 配置
  • JAVA基础知识总结
  • 敌兵布阵_区间求和问题_线段树 or 树状数组
  • CI 笔记(1)
  • hdu 1874 畅通工程续
  • 补--第四周
  • UI-定时器与动画使用总结
  • 【译】JS基础算法脚本:字符串结尾
  • .pyc 想到的一些问题
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Angular数据绑定机制
  • iOS 颜色设置看我就够了
  • JavaScript函数式编程(一)
  • Joomla 2.x, 3.x useful code cheatsheet
  • MobX
  • mockjs让前端开发独立于后端
  • PHP那些事儿
  • quasar-framework cnodejs社区
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue 动态创建 component
  • 订阅Forge Viewer所有的事件
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 微信支付JSAPI,实测!终极方案
  • 阿里云API、SDK和CLI应用实践方案
  • 如何用纯 CSS 创作一个货车 loader
  • ​configparser --- 配置文件解析器​
  • ​linux启动进程的方式
  • # 安徽锐锋科技IDMS系统简介
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (2022 CVPR) Unbiased Teacher v2
  • (4.10~4.16)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (利用IDEA+Maven)定制属于自己的jar包
  • (算法二)滑动窗口
  • (转载)利用webkit抓取动态网页和链接
  • ***监测系统的构建(chkrootkit )
  • .NET CF命令行调试器MDbg入门(一)
  • .net framework4与其client profile版本的区别
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET成年了,然后呢?
  • .net连接MySQL的方法
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [20160902]rm -rf的惨案.txt
  • [ajaxupload] - 上传文件同时附件参数值