# how to convert from BigInteger to Hex

Printable View

• 05-22-2008, 05:15 AM
nanaji
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
• 05-22-2008, 05:44 AM
hardwired
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);```
• 05-22-2008, 06:08 AM
nanaji
Hi

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

Thanks hardWired.

Regards
Nanaji
• 05-22-2008, 06:27 AM
danielstoner
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).

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:

Code:

```max long  = 7fffffffffffffff bi as long = accff196ce3f0ad2 bi as hex  = 241fc1742fe8d29593a6afe52b31741cfe5a7f8e67e477381be47851641ef7bf14baccff196ce3f0ad2```
• 05-22-2008, 06:40 AM
Eranga
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...
• 05-22-2008, 06:54 AM
danielstoner
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?
• 05-22-2008, 07:04 AM
Eranga
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?)
• 05-22-2008, 07:19 AM
danielstoner
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.
• 05-22-2008, 07:21 AM
Eranga
Ok, thanks for the explanation pal.
• 05-22-2008, 01:37 PM
nanaji
Hi ,

Regards
Nanaji
• 05-22-2008, 01:44 PM
Eranga
What you have try to work on for loop there?