方法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);
}