首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

给个16进制转化成10进制的算法?快,用解决办法

2012-01-24 
给个16进制转化成10进制的算法?快,急用给个16进制转化成10进制的算法[解决办法]publicclassChange{/***@pa

给个16进制转化成10进制的算法?快,急用
给个16进制转化成10进制的算法

[解决办法]
public class Change {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s=new String( "a ");
System.out.println(Long.parseLong(s,16));
}

}

[解决办法]
仿照 Integer.parseInt() 方法做了一个 2~36 进制转换的代码,楼主可以参考一下:

public class Test {
  public static void main(String[] args) {    
    try {
      // 采用自己实现的方法
      System.out.println(toIntDecimal( "5a44e3 ", 16));
    }catch(Exception e){
      System.out.println( "ERROR: " + e.getMessage());
    }

    // Java 中内置的方法
    System.out.println(Integer.parseInt( "5a44e3 ", 16));
  }

  public static int toIntDecimal(String s, int radix) throws Exception {
    String seq = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
    s = s.trim();
    if(s.length() > (int)((Math.log(Integer.MAX_VALUE)+1.0) / Math.log(radix))){
      throw new Exception( s + " 数值溢出,无法转换 ");
    }    
    if( (radix > seq.length()) || (radix < 2)){
      throw new Exception( "无法转换进制 " + radix);
    }    
    int num = 0;
    for (int i = 0; i < s.length(); i++) {
      int idx = seq.indexOf(Character.toUpperCase(s.charAt(i)));
      if( (idx > radix - 1) || (idx < 0) ) {
        throw new Exception( s + " 中出现非法字符 " + s.charAt(i));
      }
      num = idx + (num * radix);
    }
    return num;
  }
}

热点排行