十六进制表示的数字转换成为十进制数

/**

     * 把十六进制表示的数字转换成为十进制数

     *

     * @param sn

     *            十六进制字符串数字

     * @return

     */

    public static int hexToDec(String sn) {

       if (null == sn && 0 == sn.trim().length())

           throw new IllegalArgumentException("接收的参数 “" + sn + "” 不是十六进制表示形式!");

 

       final String P = "0x";

       if (sn.toLowerCase().startsWith(P)) {

           final String regex = "[^//da-fA-F]";

           int i = Regexutils.matcheRegexp(sn.substring(2), regex, false);

           if (0 != i)

              throw new IllegalArgumentException("接收的参数 “" + sn

                     + "” 不是十六进制表示形式!");

           else {

              char[] cs = sn.substring(2).toUpperCase().toCharArray();

              char c;

              for (int j = 0; j < cs.length; j++) {

                  c = cs[j];

                  i += toDec(c, (cs.length - j - 1));

              }

              return i;

           }

       }

       return 0;

    }

 

    private static int toDec(char c, int i) {

       final double N = 16.0;

       int n = getNum(c);

       int r = (int) (n * Math.pow(N, (double) i));

       return r;

    }

 

    private static int getNum(char c) {

       // 字符F转换成为数字为70

       if ((int) c > 70)

           return 0;

 

       int i = 0;

       switch (c) {

           case 'A':

              i = 10;

              break;

           case 'B':

              i = 11;

              break;

           case 'C':

              i = 12;

              break;

           case 'D':

              i = 13;

              break;

           case 'E':

              i = 14;

              break;

           case 'F':

              i = 15;

              break;

           case 'a':

              i = 10;

              break;

           case 'b':

              i = 11;

              break;

           case 'c':

              i = 12;

              break;

           case 'd':

              i = 13;

              break;

           case 'e':

              i = 14;

              break;

           case 'f':

              i = 15;

              break;

       }

       if (0 == i) {

           // 字符0转换成为数字为48

           return (int) c - 48;

       } else

           return i;

    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值