Java中用于将Integer值转换为十六进制的最佳代码

时间:2010-05-17 10:17:03

标签: java converter

我需要将整数值转换为十六进制。

我已经完成了一些逻辑,但我想要优化的解决方案。

编辑:抱歉,我忘了发帖说我不允许使用任何内置功能。<​​/ p>

4 个答案:

答案 0 :(得分:5)

易:

String hex = Integer.toHexString(int);

基本上它的作用是创建一个新字符串,然后从Integer类中调用一个名为toHexString的方法,该方法需要一个int arg。 所以传递int你想要改成这个方法,你将得到一个带有你的int的十六进制版本的String。

你可以将十六进制值放在int类型中,但是据我所知,当你进行十六进制转换时,你不能从int类型转换为另一种int类型。

请记住,您获取的值是String,因此您无法修改该值,否则您将获得数字格式异常。

答案 1 :(得分:4)

然后看一下Integer.toHexString(int)的实现。以下代码是从java标准库中的Integer类中提取的。

public class Test {

    final static char[] digits = {
        '0' , '1' , '2' , '3' , '4' , '5' ,
        '6' , '7' , '8' , '9' , 'a' , 'b' ,
        'c' , 'd' , 'e' , 'f'
    };

    private static String intAsHex(int i) {
        char[] buf = new char[32];
        int charPos = 32;
        int radix = 1 << 4;
        int mask = radix - 1;
        do {
            buf[--charPos] = digits[i & mask];
            i >>>= 4;
        } while (i != 0);

        return new String(buf, charPos, (32 - charPos));
    }


    public static void main(String... args) {
        System.out.println(intAsHex(77));
    }
}

输出: 4d

答案 2 :(得分:4)

假设您出于某种原因不想使用内置的toHexString,这是一种非常有效的方法:

 public static char toHexChar(int i) {
  i&=15;
  return (i<10)? (char)(i+48) : (char)(i+55);
 }

 public static String toHexString(int n) {
  char[] chars=new char[8];
  for (int i=0; i<8; i++) {
   chars[7-i]=toHexChar(n);
   n>>=4;
  };
  return new String(chars);
 }

答案 3 :(得分:1)

检查

public class IntToHexa {
    public static void main(java.lang.String args[]){
        /*
         * Here we need an integer to convert.
         * [1]You can pass as command line argument
         * [2]You can get as input from console
         * [3]Take a constant. Here I'm taking a constant
         */
        int intToConvert = 450;
        java.lang.StringBuilder convertedHexa = new java.lang.StringBuilder("");
        while (intToConvert > 15){
            /*
         * If the reminder is less than 10, add the remainder. else get the equivalent hexa code
         * Here I'm getting the character code and adding the charater to the hexa string.
         * For that I'm getting the difference between the reminder and 10.
         * For example, if the reminder is 13, the reminder will be 3.
         * Then add that difference to 65. In this example, it will become 68.
         * Finally, get the quivalent char code of the result number. Here it will be D.
         * Same for number, I'm adding it to 48
         */
            convertedHexa.append(intToConvert % 16 < 10 ? ((char)(48 + (intToConvert % 16))) : ((char)(65 + (intToConvert % 16 - 10))));
            intToConvert /= 16;
        }
        convertedHexa.append(intToConvert % 16 < 10 ? ((char)(48 + (intToConvert % 16))) : ((char)(65 + (intToConvert % 16 - 10))));
        java.lang.System.out.println(convertedHexa.reverse());
    }
}