Оптимальный код в Java для преобразования целочисленного значения в шестнадцатеричное - PullRequest
0 голосов
/ 17 мая 2010

Мне нужно преобразовать целочисленное значение в шестнадцатеричное.

Я покончил с некоторыми логическими, но я хочу оптимизированные решения.

РЕДАКТИРОВАТЬ: Извините, я забыл опубликовать, что мне не разрешено использовать любые встроенные функции.

Ответы [ 4 ]

5 голосов
/ 17 мая 2010

Легко:

String hex = Integer.toHexString(int);

По сути, это создает новую строку, а затем вызывает метод из класса Integer с именем toHexString, которому требуется int arg. Поэтому передайте int, которое вы хотите изменить, в этот метод, и вы получите String с шестнадцатеричной версией вашего int.

Вы можете поместить шестнадцатеричные значения в типы int, но вы не можете конвертировать из типа int в другой тип int, насколько я знаю, когда вы выполняете шестнадцатеричные преобразования.

Помните, что возвращаемое вами значение является строкой, поэтому вы не можете изменить значение, в противном случае вы получите исключение числового формата.

4 голосов
/ 17 мая 2010

Если вы по какой-то причине не хотите использовать встроенную строку 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);
 }
4 голосов
/ 17 мая 2010

Ну тогда взгляните на реализацию Integer.toHexString(int). Следующий код извлекается из класса Integer в стандартной библиотеке Java.

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

1 голос
/ 17 мая 2010

Проверьте это

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());
    }
}
...