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

来源:互联网 发布:物联传感 知乎 编辑:程序博客网 时间:2024/05/16 16:13

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 blocke.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 0
原创粉丝点击