# Thread: how to convert from BigInteger to Hex

1. Member
Join Date
May 2008
Posts
31
Rep Power
0

## how to convert from BigInteger to Hex

Hi guys

I know we can convert from Integer to Hex by using
int i =2;
String s = Integer.toHexString(i);

Like wise

How can i convert BigInteger bi = new BigInteger("12345678923456");

How to convert the above "bi" to hexString.

Thanks
Regards
Nanaji

2. Java Code:
```        int i =2;
String s = Integer.toHexString(i);
System.out.printf("s = %s%n", s);
BigInteger bi = new BigInteger("12345678923456");
System.out.printf("bi = %s%n", bi);
System.out.println("Integer.MAX_VALUE = " + Integer.MAX_VALUE);
System.out.println("Long.MAX_VALUE = " + Long.MAX_VALUE);
long n = bi.longValue();
String hex = Long.toHexString(n);
System.out.printf("hex = %s%n", hex);```

3. Member
Join Date
May 2008
Posts
31
Rep Power
0
Hi

Thanks for the quick reply. I really appreciate. It works fantastic.

Thanks hardWired.

Regards
Nanaji

4. It works like a charm but it is not very safe :). BigInteger.longValue() returns only the lowest 64 bits while BigInteger is meant to represent arbitrary-precision integers. This means you can get a wrong value, not even of the same magnitude and it might be even with the wrong sign (+/-).
A simpler solution is to use BigInteger.toString(int radix).

Java Code:
```import java.math.BigInteger;

public class BIHex {
public static void main(String[] args) {
java.math.BigInteger bi = new BigInteger(
"12345678901234567890123456789012345678901234567890" +
"12345678901234567890123456789012345678901234567890");
System.out.println("max long   = " + Long.toHexString(Long.MAX_VALUE));
System.out.println("bi as long = " + Long.toHexString(bi.longValue()));
System.out.println("bi as hex  = " + bi.toString(16));
}
}```
When you run this class you see the difference:

Java Code:
```max long   = 7fffffffffffffff

5. I have thing to clarify. As far as I remember, radix also have a range (a min value and a max value). What happened to the result if the radix is out of rang. I think if the radix out of that range, set to default, to decimal. So...

6. Hi Eranga :)

Yes you are right. The radix range is 2-36 and it is defined in Character.MIN_RADIX and Character.MAX_RADIX. For a radix out of range the transformation algorithm defaults to radix 10.
So... what? :) It works fine for radix 16 :)
I am not sure I got the question. Is there any problem with my example?

7. I got what you say. So I remember that ;) nice to see that.

What I'm say is, if the radix is 64?? (It can be, right?)

8. The max radix value is 36 because there are only 36 symbols to use for representation (26 letters + 10 digits). If you use 64 will default to 10 so you get the wrong representation. If you want to transform in base 64 you have to write your own algorithm and specify what symbols to use from 37 to 63.

9. Member
Join Date
May 2008
Posts
31
Rep Power
0
Hi ,

Regards
Nanaji
Last edited by nanaji; 05-23-2008 at 05:49 AM.

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•