Dec2hex.java
/*
* $Id: Dec2hex.java,v 1.12 2008/02/25 08:35:51 koga Exp $
*
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*/
package org.mklab.tool.matrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.matrix.IntMatrix;
/**
* 十進数を十六進数に変換するクラスです。
*
* <p>Decimal number to hexadecimal number
*
* @author koga
* @version $Revision: 1.12 $
* @see org.mklab.tool.matrix.Hex2dec
* @see org.mklab.tool.matrix.Hex2num
*/
public class Dec2hex {
/**
* メインメソッド
*
* @param args コマンドライン引数
*/
public static void main(String[] args) {
System.out.println("2748 = " + dec2hex(2748)); //$NON-NLS-1$
}
/**
* 10進数の整数を16進数の文字列に変換します。
*
* @param value 10進数
* @return 16進数 (hexadecimal number)
*/
public static String dec2hex(int value) {
int x = value;
if (x == 0) {
return "0"; //$NON-NLS-1$
}
double d = Math.log(x) / Math.log(16);
if (d > 0) d = Math.floor(d);
else d = Math.ceil(d);
int n = 1 + (int)d;
IntMatrix idx = new IntMatrix(DoubleMatrix.unit(1).appendRight(DoubleMatrix.ones(1, n - 1).multiply(16)).cumulativeProduct());
String h = ""; //$NON-NLS-1$
String ABCDEF = "ABCDEF"; //$NON-NLS-1$
for (int i = 1; i <= n; i++) {
d = ((double)(x)) / idx.getIntElement(n - i + 1);
if (d > 0) d = Math.floor(d);
else d = Math.ceil(d);
int g = (int)d;
x = x % idx.getIntElement(n - i + 1);
if (g > 9) {
h = h + ABCDEF.charAt(g - 9 - 1);
} else {
h = h + g;
}
}
return h;
}
}