Java Convert integer to hex integer
Asked Answered
A

8

59

I'm trying to convert a number from an integer into an another integer which, if printed in hex, would look the same as the original integer.

For example:

Convert 20 to 32 (which is 0x20)

Convert 54 to 84 (which is 0x54)

Apparently answered 17/2, 2012 at 1:8 Comment(2)
Possible duplicate of How to get hex value from integer in javaDisesteem
I just realised now that to actually solve the given test cases, it is to convert hex to int, not the other way around. However, the question title that says "Java Convert integer to hex integer" has led many answers including mine and the most upvoted one to converting int to hex.Alexandrina
G
42
public static int convert(int n) {
  return Integer.valueOf(String.valueOf(n), 16);
}

public static void main(String[] args) {
  System.out.println(convert(20));  // 32
  System.out.println(convert(54));  // 84
}

That is, treat the original number as if it was in hexadecimal, and then convert to decimal.

Gillie answered 17/2, 2012 at 1:14 Comment(3)
Converting from 4 bytes to a string, then from string to an int and then to hex? No, thanks.Kulp
This solution is flawed. Try to run the following: Integer.valueOf(String.valueOf(-2115381772), 16) - this returns a NumberFormatException.Fourthclass
This converts a number in base 16 to its representation in base 10. Correct answer is belowLeporide
C
257

The easiest way is to use Integer.toHexString(int)

Cadmar answered 3/11, 2012 at 16:50 Comment(4)
The question was to convert from integer to integer, not integer to string. Please read the question again.Sane
That doesn't make sense though, you can't control the integer's internal representation. If you want something in hex, you're by definition asking about a human readable representation.Venlo
@sircodesalot: The question is about calculating an integer with a certain property if printed as hex, which is a purely mathematical conversion. I strongly disagree with Jossef that an answer should be marked as correct based on google results, but according to the votes, I seem to be in the minority.Periapt
@AdamNybäck rektHofuf
G
42
public static int convert(int n) {
  return Integer.valueOf(String.valueOf(n), 16);
}

public static void main(String[] args) {
  System.out.println(convert(20));  // 32
  System.out.println(convert(54));  // 84
}

That is, treat the original number as if it was in hexadecimal, and then convert to decimal.

Gillie answered 17/2, 2012 at 1:14 Comment(3)
Converting from 4 bytes to a string, then from string to an int and then to hex? No, thanks.Kulp
This solution is flawed. Try to run the following: Integer.valueOf(String.valueOf(-2115381772), 16) - this returns a NumberFormatException.Fourthclass
This converts a number in base 16 to its representation in base 10. Correct answer is belowLeporide
A
13

Another way to convert int to hex.

String hex = String.format("%X", int);

You can change capital X to x for lowercase.

Example:

String.format("%X", 31) results 1F.

String.format("%X", 32) results 20.

Alexandrina answered 13/1, 2016 at 9:10 Comment(1)
String hex = String.format("%02X", int); for fixed length (two characters with eventual leading zeros).Jeremiah
W
7
int orig = 20;
int res = Integer.parseInt(""+orig, 16);
Winebibber answered 17/2, 2012 at 1:14 Comment(0)
B
5

You could try something like this (the way you would do it on paper):

public static int solve(int x){
    int y=0;
    int i=0;

    while (x>0){
        y+=(x%10)*Math.pow(16,i);
        x/=10;
        i++;
    }
    return y;
}

public static void main(String args[]){
    System.out.println(solve(20));
    System.out.println(solve(54));
}

For the examples you have given this would calculate: 0*16^0+2*16^1=32 and 4*16^0+5*16^1=84

Betsey answered 17/2, 2012 at 1:25 Comment(0)
H
4
String input = "20";
int output = Integer.parseInt(input, 16); // 32
Hinda answered 17/2, 2012 at 1:14 Comment(0)
V
1

The following is optimized iff you only want to print the hexa representation of a positive integer.

It should be blazing fast as it uses only bit manipulation, the utf-8 values of ASCII chars and recursion to avoid reversing a StringBuilder at the end.

public static void hexa(int num) {
    int m = 0;
    if( (m = num >>> 4) != 0 ) {
        hexa( m );
    }
    System.out.print((char)((m=num & 0x0F)+(m<10 ? 48 : 55)));
}
Veronikaveronike answered 11/12, 2013 at 17:41 Comment(0)
D
0

Simply do this:

public static int specialNum(num){

    return Integer.parseInt( Integer.toString(num) ,16)
}

It should convert any special decimal integer to its hexadecimal counterpart.

Dixiedixieland answered 22/5, 2017 at 22:48 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.