Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: LeandroA en 9 Noviembre 2010, 04:52 AM

Título: CurrencyToHex ?
Publicado por: LeandroA en 9 Noviembre 2010, 04:52 AM
Hola como puedo convertir un valor Currency en Hexadecimal?
con la función Hex de vb me da desbordamiento

Debug.Print Hex(4294967295#)

Saludos.
Título: Re: CurrencyToHex ?
Publicado por: LeandroA en 9 Noviembre 2010, 05:23 AM
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.
Título: Re: CurrencyToHex ?
Publicado por: BlackZeroX en 9 Noviembre 2010, 07:22 AM
.
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!¡.
Título: Re: CurrencyToHex ?
Publicado por: BlackZeroX en 9 Noviembre 2010, 07:55 AM
.
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!¡.
Título: Re: CurrencyToHex ?
Publicado por: LeandroA en 9 Noviembre 2010, 08:03 AM
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.
Título: Re: CurrencyToHex ?
Publicado por: 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
Título: Re: CurrencyToHex ?
Publicado por: BlackZeroX en 9 Noviembre 2010, 08:10 AM
.
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!¡.
Título: Re: CurrencyToHex ?
Publicado por: 79137913 en 9 Noviembre 2010, 17:56 PM
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!!!