Link to home
Create AccountLog in
Avatar of bmatumbura
bmatumbura

asked on

Converting big numbers to hex

Dear Experts,

I need a function that can convert big numbers into hex representation and vice versa.

The Hex$ function only works for small numbers. For big numbers like 12345678901234, Hex$ throws an Overflow error.

Here is what I have been trying to do:

==============================================
Dim sHex As String, C as Currency

C = 12345678901234

sHex = Hex$(C) ' I get an Overflow error on this statement!

==============================================
Avatar of Patrick Matthews
Patrick Matthews
Flag of United States of America image

Hi bmatumbura,

Hex returns the hexadecimal representation of a Long data type.

The biggest positive number a Long can contain is 2,147,483,647.  Your number is larger than that (by a few orders
of magnitude).

Regards,

Patrick
Avatar of bmatumbura
bmatumbura

ASKER

Yes, I understand that. What I need is a user defined function that works more like Hex$, but can accept big numbers beyong the Long data type e.g the Currency data type, which can store numbers up to 922,337,203,685,477.
Does this function help?

Public Function BigHex(ByVal varDecimal As Variant) As String
    'Declare Vars
    Dim intLoopLength As Integer
    Dim strHex As String
    Dim I As Integer
    '
    'Calculate number of hex digits
    intLoopLength = Int(Log(varDecimal) / Log(16))
    '
    strHex = ""
    For I = intLoopLength To 0 Step -1
        strHex = strHex & Hex(Int(varDecimal / (16 ^ I)))
        varDecimal = varDecimal - Int(varDecimal / (16 ^ I)) * (16 ^ I)
    Next I
    '
    'Return hex value
    BigHex = strHex
End Function
Voila! It works, although I need to verify the results of the computations. Now for the 2nd part, How do I convert this Hex value back into the big number?
ASKER CERTIFIED SOLUTION
Avatar of AtanAsfaloth
AtanAsfaloth

Link to home
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
See answer
I have increased the points. You deserve it! Thanks.
You're welcome and thanks a lot :)