Hexadecimal to Integer in Java

121,313

Solution 1

Why do you not use the java functionality for that:

If your numbers are small (smaller than yours) you could use: Integer.parseInt(hex, 16) to convert a Hex - String into an integer.

  String hex = "ff"
  int value = Integer.parseInt(hex, 16);  

For big numbers like yours, use public BigInteger(String val, int radix)

  BigInteger value = new BigInteger(hex, 16);

@See JavaDoc:

Solution 2

Try this

public static long Hextonumber(String hexval)
    {
        hexval="0x"+hexval;
//      String decimal="0x00000bb9";
        Long number = Long.decode(hexval);
//.......       System.out.println("String [" + hexval + "] = " + number);
        return number;
        //3001
    }
Share:
121,313
Dimitri
Author by

Dimitri

Updated on April 05, 2020

Comments

  • Dimitri
    Dimitri about 4 years

    I am trying to convert a String hexadecimal to an integer. The string hexadecimal was calculated from a hash function (sha-1). I get this error : java.lang.NumberFormatException. I guess it doesn't like the String representation of the hexadecimal. How can I achieve that. Here is my code :

    public Integer calculateHash(String uuid) {
    
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA1");
            digest.update(uuid.getBytes());
            byte[] output = digest.digest();
    
            String hex = hexToString(output);
            Integer i = Integer.parseInt(hex,16);
            return i;           
    
        } catch (NoSuchAlgorithmException e) {
            System.out.println("SHA1 not implemented in this system");
        }
    
        return null;
    }   
    
    private String hexToString(byte[] output) {
        char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'A', 'B', 'C', 'D', 'E', 'F' };
        StringBuffer buf = new StringBuffer();
        for (int j = 0; j < output.length; j++) {
            buf.append(hexDigit[(output[j] >> 4) & 0x0f]);
            buf.append(hexDigit[output[j] & 0x0f]);
        }
        return buf.toString();
    
    }
    

    For example, when I pass this string : _DTOWsHJbEeC6VuzWPawcLA, his hash his : 0xC934E5D372B2AB6D0A50B9F0341A00ED029BDC15

    But i get : java.lang.NumberFormatException: For input string: "0xC934E5D372B2AB6D0A50B9F0341A00ED029BDC15"

    I really need to do this. I have a collection of elements identified by their UUID which are string. I will have to store those elements but my restrictions is to use an integer as their id. It is why I calculate the hash of the parameter given and then I convert to an int. Maybe I am doing this wrong but can someone gives me an advice to achieve that correctly!!

    Thanks for your help !!

  • OscarRyz
    OscarRyz about 13 years
    I really don't get this answer, isn't that what he's already trying in Integer i = Integer.parseInt(hex,16);?
  • Dimitri
    Dimitri about 13 years
    I tried to use the UUID's String hash code but I get also IllegalArgumentException. This is why I drop UUID; By the way, I don't even know how they generate their UUID, it is not my project
  • Dimitri
    Dimitri about 13 years
    Is it possible to convert from BigInteger to Integer?
  • Michael Brewer-Davis
    Michael Brewer-Davis about 13 years
    By "UUID's String hash code" I mean uuid.hashCode() (which uses the function String.hashCode()). I can't see that giving an IAE?
  • Java Drinker
    Java Drinker about 13 years
    Additionally get rid of the 0x part... I don't know that this is allowed.. and if you can guarantee that it will always be 0xABC982.., then you can always just remove the first 2 chars
  • eggyal
    eggyal about 13 years
    I think you mean to instantiate a new BigInteger in your third line of code? It also ought to be more efficient to construct directly from the byte array rather than the hexadecimal string representation.
  • Dimitri
    Dimitri about 13 years
    Yeah, i know. I just tried this method. But the problem is when I try String id = UUID.fromString(uuid) i get an IllegalArgumentException.
  • OscarRyz
    OscarRyz about 13 years
    Only if the value of BigInteger is not larger than Integer.MAX_VALUE which in this case it will be. See: download.oracle.com/javase/6/docs/api/java/math/…
  • user207421
    user207421 about 13 years
    This answer is basically meaningless. An array of bytes is simply a multiple-precision number. Doesn't answer the question.
  • Ralph
    Ralph almost 13 years
    @eggyal: You are right, it is new BigInteger - I have corrected it