16进制转2进制的一个类

本文介绍了一个用于将十六进制数值转换为二进制格式的Java类。该类提供了多种转换方法,包括基本转换、带有分隔符的转换及美化格式的转换。此外,还提供了一个示例来展示如何使用这些方法。
package cn.edu.xupt.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;

public class Hex2Bin {
	private Hex2Bin() {

	}

	/**
	 * 16进制转2进制
	 * @param hexString
	 * @return
	 */
	public static String convert(String hexString) {
		BigInteger decVal = new BigInteger(hexString, 16);
		return decVal.toString(2);
	}

	/*
	 * 16进制转2进制 转换后的结果按每4位一组用指定分隔符分割
	 */
	public static String convert(String hexString, String delimiter) {
		// 获得指定16进制的二进制形式
		String binVal = convert(hexString);

		// 将16进制的2进制形式用分割符分割
		return groupBinString(binVal, delimiter, 4);
	}

	/*
	 * 16进制转2进制 转换后的结果按每4位一组用指定分隔符分割, 并且16进制的0转化后的结果为0000
	 */
	public static String beautifFormatConvert(String hexString, String delimiter) {
		// 获得指定16进制的二进制形式
		String binVal = convert(hexString);

		// 将16进制的0用二进制的0000表示, 得到16进制的二进制表示结果
		int hexLen = hexString.length();
		int binLen = binVal.length();
		int fillLen = 4 * hexLen - binLen;

		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < fillLen; i++) {
			sb.append("0");
		}

		sb.append(binVal);

		// 给结果加入间隔符
		return groupBinString(sb.toString(), delimiter, 4);
	}

	/*
	 * 将16进制转化为2进制后的结果,用指定的分隔符分割
	 */
	public static String groupBinString(String binStr, String delimiter,
			int oneGroupCount) {
		String val = binStr;

		int len = val.length();

		StringBuilder sb = new StringBuilder();

		int remainder = len % oneGroupCount;

		if (remainder != 0) {
			sb.append(val, 0, remainder);

		} else {
			sb.append(val, 0, oneGroupCount);
			remainder = oneGroupCount;
		}

		for (int i = remainder; i < val.length(); i += oneGroupCount) {
			sb.append(delimiter);
			sb.append(val, i, i + oneGroupCount);
		}

		return sb.toString();
	}

	public static void main(String[] args) {
		String str = "09A7B";
		String delimiter = ",";
		
		System.out.println(Hex2Bin.convert(str));
		System.out.println(Hex2Bin.convert(str, delimiter));
		System.out.println(Hex2Bin.beautifFormatConvert(str, delimiter));
	}
}

 

1001101001111011
1001,1010,0111,1011
0000,1001,1010,0111,1011

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值