Hex2dec.java

/*
 * $Id: Hex2dec.java,v 1.13 2008/02/25 08:35:52 koga Exp $
 * 
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.matrix;

import org.mklab.nfc.matrix.DoubleMatrix;


/**
 * 十六進数から十進数に変換するクラスです。
 * 
 * <p>Hexadecimal number to decimal number
 * 
 * @author koga
 * @version $Revision: 1.13 $
 * @see org.mklab.tool.matrix.Dec2hex
 * @see org.mklab.tool.matrix.Hex2num
 */
public class Hex2dec {

  /**
   * メインメソッド
   * 
   * @param args コマンドライン引数
   */
  @SuppressWarnings("nls")
  public static void main(String[] args) {
    System.out.println("7B = " + hex2dec("7B"));
  }

  /**
   * 16進数を10進数の整数に変換します。
   * 
   * @param h 16進数
   * @return 10進数 (decimal number)
   */
  public static int hex2dec(String h) {
    int n = h.length();
    DoubleMatrix pp = DoubleMatrix.unit(1).appendRight(DoubleMatrix.ones(1, n - 1).multiply(16)).cumulativeProduct();
    DoubleMatrix hh = new DoubleMatrix(1, n);

    for (int i = 1; i <= n; i++) {
      int hi = h.charAt(i - 1);
      if (hi > 96) {
        hh.setElement(i, hi - 87);
      } else if (hi > 64) {
        hh.setElement(i, hi - 55);
      } else {
        hh.setElement(i, hi - 48);
      }
    }
    int d = (int)(hh.multiply(pp.flipLeftRight().transpose()).getDoubleElement(1));

    return d;
  }

}