JAVA语言十六进制数字符串数和十进制数字符串互转的方法(个别方法也适用于其他进制之间的转换)

304 阅读2分钟

方法1:使用Integer自带的方法以十进制获取数值,并以十六进制输出为字符串

使用该方法也能实现其他进制数之间的互转,但是使用Int类型也就意味着能转的数值不能大于2147483647。

/**
 * 十进制数据转换为十六进制字符串数
 * 
 * @param dec
 * @return
 */
public static String decToHex(String dec) {
	int data = Integer.parseInt(dec, 10);
	return Integer.toString(data, 16);
}

/**
 * 十六进制数据转换为十进制字符串数
 * 
 * @param hex
 * @return
 */
public static String hexToDec(String hex) {
	int data = Integer.parseInt(hex, 16);
	return Integer.toString(data, 10);
}

方法2:通过数值的计算获取十六进制数值

这里使用BigDecimal类进行计算以打破方法1的范围限制,但是该方法只能用于十进制数转十六进制数,无法做到方法1的其他进制之间也能转换。

/**
 * 十进制数据转换为十六进制字符串数
 * 
 * @param dec
 * @return
 */
public static String decToHex(String dec) {
BigDecimal sixteen = new BigDecimal(16);
	BigDecimal n = new BigDecimal(dec);
	StringBuffer sb = new StringBuffer(8);
	String a;
	char[] b = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
	/**判断是否为0*/
	if (n.compareTo(BigDecimal.ZERO)==0) {
		return n.toString();
	}
	while (n.compareTo(BigDecimal.ZERO)!=0) {
		/**BigDecimal除法取余数*/
		sb = sb.append(b[n.remainder(sixteen).intValue()]);
		/**BigDecimal除法,省略小数点后的位数且不进位*/
		n = n.divide(sixteen,0,BigDecimal.ROUND_DOWN);
	}
	a = sb.reverse().toString();
	return a;
}

方法3:使用BigInteger获取十进制字符串,并以十六进制数输出字符串

使用BigInteger类进行处理,一方面解决了int类的大小限制,也能由于处理其他进制数值之间的转换

/**
 * 十进制数据转换为十六进制字符串数
 * 
 * @param dec
 * @return
 */
public static String decToHex(String dec) {
	BigInteger data = new BigInteger(dec,10);
	return data.toString(16);
}

/**
 * 十六进制数据转换为十进制字符串数
 * 
 * @param hex
 * @return
 */
public static String hexToDec(String hex) {
	BigInteger data = new BigInteger(hex,16);
	return data.toString(10);
}

到此十六进制与十进制字符串互转介绍完成。