60

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)

3
  • Possible duplicate of How to get hex value from integer in java Commented Dec 17, 2016 at 10:47
  • 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. Commented Jun 23, 2017 at 1:41
  • IMPORTANT: This post is asking a DIFFERENT question than 99.999% of the coders coming here would want re conversion between decimal and hexadecimal. Almost everyone should follow link in first comment, or see the highest rated answer. Definitely DON'T use the accepted answer. Unless you understand EXACTLY what this question is asking. And grasp the difference between the internal value of an Integer, vs. representing that value in either decimal or hexadecimal. Commented Feb 18 at 2:33

8 Answers 8

257

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

Sign up to request clarification or add additional context in comments.

5 Comments

The question was to convert from integer to integer, not integer to string. Please read the question again.
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.
@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.
@AdamNybäck rekt
@sircodesalot Not really. The accepted answer matches exactly what the question is asking. Look at the examples in the question: Convert 20 to 32 (which is 0x20). Do that, and you've addressed this (highly unusual) question. The input is an integer. The output is a different integer. HOWEVER, THIS answer IS the highest voted one. Because it is what everyone (except the question-asker) wants!
43
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.

7 Comments

Converting from 4 bytes to a string, then from string to an int and then to hex? No, thanks.
This solution is flawed. Try to run the following: Integer.valueOf(String.valueOf(-2115381772), 16) - this returns a NumberFormatException.
This converts a number in base 16 to its representation in base 10. Correct answer is below
@JoaquinIurchuk - Not really. This answer does exactly what the question asks. For example, given int 20, it converts that to string "20", then treats that string as if it were a hexadecimal value, equivalent to 0x20, and produces the corresponding internal integer value. Internally (in all current mainstream cpus) that value is in binary: 0000 0000 0010 0000. Any representation occurs when you choose to display it. At that time, you can choose to see it in decimal: 32, as the question mentions, or you can see it in hex: "20" , by specifying an appropriate display format.
@OndraŽižka [and upvoters on that first comment] - I suspect you misinterpret the question. It is a highly unusual question/request. If you want to do the "usual" conversion between decimal and hexadecimal, search for different Q&As.
|
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.

2 Comments

String hex = String.format("%02X", int); for fixed length (two characters with eventual leading zeros).
FWIW: While this is what MANY people want, this isn't what this question asked for.
7
int orig = 20;
int res = Integer.parseInt(""+orig, 16);

Comments

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

Comments

4
String input = "20";
int output = Integer.parseInt(input, 16); // 32

Comments

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

Comments

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.