Java十六进制与十进制间相互转换

1、10进制转16进制,运用辗转相除法,取余数补对应的位数,直到相除结果为0。

2、16进制转10进制,对16进制数的每一位数乘以其对应的16的幂,相加。

函数代码如下:

//10进制转16进制
	public static String IntToHex(int n){
		char[] ch = new char[20];
		int nIndex = 0;
		while ( true ){
			int m = n/16;
			int k = n%16;
			if ( k == 15 )
				ch[nIndex] = 'F';
			else if ( k == 14 )
				ch[nIndex] = 'E';
			else if ( k == 13 )
				ch[nIndex] = 'D';
			else if ( k == 12 )
				ch[nIndex] = 'C';
			else if ( k == 11 )
				ch[nIndex] = 'B';
			else if ( k == 10 )
				ch[nIndex] = 'A';
			else 
				ch[nIndex] = (char)('0' + k);
			nIndex++;
			if ( m == 0 )
				break;
			n = m;
		}
		StringBuffer sb = new StringBuffer();
		sb.append(ch, 0, nIndex);
		sb.reverse();
		String strHex = new String("0x");
		strHex += sb.toString();
		return strHex;
	}
	
	//16进制转10进制
	public static int HexToInt(String strHex){
		int nResult = 0;
		if ( !IsHex(strHex) )
			return nResult;
		String str = strHex.toUpperCase();
		if ( str.length() > 2 ){
			if ( str.charAt(0) == '0' && str.charAt(1) == 'X' ){
				str = str.substring(2);
			}
		}
		int nLen = str.length();
		for ( int i=0; i<nLen; ++i ){
			char ch = str.charAt(nLen-i-1);
			try {
				nResult += (GetHex(ch)*GetPower(16, i));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return nResult;
	}
	
	//计算16进制对应的数值
	public static int GetHex(char ch) throws Exception{
		if ( ch>='0' && ch<='9' )
			return (int)(ch-'0');
		if ( ch>='a' && ch<='f' )
			return (int)(ch-'a'+10);
		if ( ch>='A' && ch<='F' )
			return (int)(ch-'A'+10);
		throw new Exception("error param");
	}
	
	//计算幂
	public static int GetPower(int nValue, int nCount) throws Exception{
		if ( nCount <0 )
			throw new Exception("nCount can't small than 1!");
		if ( nCount == 0 )
			return 1;
		int nSum = 1;
		for ( int i=0; i<nCount; ++i ){
			nSum = nSum*nValue;
		}
		return nSum;
	}
	//判断是否是16进制数
public static boolean IsHex(String strHex){
int i = 0;
if ( strHex.length() > 2 ){
if ( strHex.charAt(0) == '0' && (strHex.charAt(1) == 'X' || strHex.charAt(1) == 'x') ){
i = 2;
}
}
for ( ; i<strHex.length(); ++i ){
char ch = strHex.charAt(i);
if ( (ch>='0' && ch<='9') || (ch>='A' && ch<='F') || (ch>='a' && ch<='f') )
continue;
return false;
}
return true;
}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值