CurrencyToHex ?

Iniciado por LeandroA, 9 Noviembre 2010, 04:52 AM

0 Miembros y 1 Visitante están viendo este tema.

LeandroA

Hola como puedo convertir un valor Currency en Hexadecimal?
con la función Hex de vb me da desbordamiento

Debug.Print Hex(4294967295#)

Saludos.

LeandroA

Soluciando

Código (Vb) [Seleccionar]

Option Explicit

Private Sub Form_Load()
'Debug.Print LongToCurrency(-1)
'Debug.Print CurrencyToLong(4294967295#)
Debug.Print BigHex(4294967295#)

End Sub


Private Function BigHex(ByVal value As Currency) As String
    BigHex = Hex(CurrencyToLong(value))
End Function

Private Function LongToCurrency(ByVal lVal As Long) As Currency
    If lVal < 0 Then
        LongToCurrency = 4294967296# + lVal
    Else
        LongToCurrency = lVal
    End If
End Function

Private Function CurrencyToLong(ByVal lVal As Currency) As Long
    If lVal > 2147483647# Then
        CurrencyToLong = lVal - 4294967296#
    Else
        CurrencyToLong = lVal
    End If
End Function


Saludos.

BlackZeroX

#2
.
Las funciones estan mal, esageradamente mal ya que el --1 en representacion negativa es FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF... etc., es decir el complemento del numero N con respecto al valor maximo...

Prueba de lo dicho:

Código (Vb) [Seleccionar]


Debug.Print BigHex(4295017296#)  ' // Return    C350  siendo que debe de ser en Hexadecimal --> 10000C350



P.D.: no funciona Mod con los currency ¬¬"

Dulces Lunas!¡.
The Dark Shadow is my passion.

BlackZeroX

.
si puedes hacer la obtencion del residuo de una divicion  ( Mod ) con un valor de mas del valor maximo de un tipo long como el que acabas de poner puedes modificar esta funcion

http://infrangelux.sytes.net/Blog/index.php?option=com_content&view=article&id=20:bdec2basen&catid=2:catprocmanager&Itemid=8

Dulces Lunas!¡.
The Dark Shadow is my passion.

LeandroA

Hola en realidad 4295017295 es el valor maximo  por eso esa funcion me sirve, quizas esta mal decir que es un valor Currency

Es valor maximo del registro de windows en los tipos REG_DWORD

Saludos.

LeandroA

ahora que veo un poco mejor es utilzar la parte negativa para ampliar la capacidad de un long

BlackZeroX

.
Solo menciono este codidigo fuente por si alguien quiere algo mas...

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=68710&lngWId=1

Cita de: LeandroA en  9 Noviembre 2010, 08:06 AM
ahora que veo un poco mejor es utilzar la parte negativa para ampliar la capacidad de un long

Simulando el Unsigned long de C++, si esa es buena...

Ducles Lunas!¡.
The Dark Shadow is my passion.

79137913

HOLA!!!

No se si les sirva pero encontre esto en la red. No se si es lo que buscan pero yo que se, quise ayudar en algo.

Código (vb) [Seleccionar]
Public Function Hex2Currency(HexCurrency As String) As Currency
    Dim s As String
    Dim i As Integer
    ' capture error
    On Error GoTo ErrorHandler
    SaveErrNum = 0
    ' intitialise
    s = "&H"
    ' create hex string from each char
    For i = 1 To Len(HexCurrency)
         ' high order nibble
        s = s & Hex((Asc(Mid(HexCurrency, i, 1)) And &HF0) / 16)
        ' low order nibble
        s = s & Hex(Asc(Mid(HexCurrency, i, 1)) And &HF)
    Next i
    ' hex to currency
    Hex2Currency = CCur(s)
    Exit Function
ErrorHandler:
    Hex2Currency = 0
    SaveErrNum = 1
End Function


Fuente: http://www.tek-tips.com/viewthread.cfm?qid=1444740&page=77

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*