Hexadecimal to Integer in Java
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
}
Dimitri
Updated on April 05, 2020Comments
-
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 about 13 yearsI really don't get this answer, isn't that what he's already trying in
Integer i = Integer.parseInt(hex,16);
? -
Dimitri about 13 yearsI 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 about 13 yearsIs it possible to convert from BigInteger to Integer?
-
Michael Brewer-Davis about 13 yearsBy "UUID's String hash code" I mean
uuid.hashCode()
(which uses the functionString.hashCode()
). I can't see that giving an IAE? -
Java Drinker about 13 yearsAdditionally get rid of the
0x
part... I don't know that this is allowed.. and if you can guarantee that it will always be0xABC982..
, then you can always just remove the first 2 chars -
eggyal about 13 yearsI 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 about 13 yearsYeah, i know. I just tried this method. But the problem is when I try String id = UUID.fromString(uuid) i get an IllegalArgumentException.
-
OscarRyz about 13 yearsOnly 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 about 13 yearsThis answer is basically meaningless. An array of bytes is simply a multiple-precision number. Doesn't answer the question.
-
Ralph almost 13 years@eggyal: You are right, it is new BigInteger - I have corrected it