java 二进制数字符串转换工具类_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java 二进制数字符串转换工具类

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

 2016/5/12 5:33:51  InJavaWeTrust  程序员俱乐部  我要评论(0)
  • 摘要:java二进制数字符串转换工具类将二进制转换成八进制将二进制转换成十进制将二进制转换成十六进制将十进制转换成二进制packagecom.iteye.injavawetrust.ad;importjava.util.regex.Matcher;importjava.util.regex.Pattern;/***二进制转换工具类*<ul>*<li>将二进制转换成八进制</li>*<li>将二进制转换成十进制</li>*<li>
  • 标签:工具 Java 字符串 二进制

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

?

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

?

class="java" name="code">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);
	}
}

?

?

?

?

发表评论
用户名: 匿名