Foro de elhacker.net

Programación => 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
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4. 'Debug.Print LongToCurrency(-1)
  5. 'Debug.Print CurrencyToLong(4294967295#)
  6. Debug.Print BigHex(4294967295#)
  7.  
  8. End Sub
  9.  
  10.  
  11. Private Function BigHex(ByVal value As Currency) As String
  12.    BigHex = Hex(CurrencyToLong(value))
  13. End Function
  14.  
  15. Private Function LongToCurrency(ByVal lVal As Long) As Currency
  16.    If lVal < 0 Then
  17.        LongToCurrency = 4294967296# + lVal
  18.    Else
  19.        LongToCurrency = lVal
  20.    End If
  21. End Function
  22.  
  23. Private Function CurrencyToLong(ByVal lVal As Currency) As Long
  24.    If lVal > 2147483647# Then
  25.        CurrencyToLong = lVal - 4294967296#
  26.    Else
  27.        CurrencyToLong = lVal
  28.    End If
  29. End Function
  30.  

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
  1.  
  2. Debug.Print BigHex(4295017296#)  ' // Return    C350  siendo que debe de ser en Hexadecimal --> 10000C350
  3.  
  4.  

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

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
  1. Public Function Hex2Currency(HexCurrency As String) As Currency
  2.    Dim s As String
  3.    Dim i As Integer
  4.    ' capture error
  5.    On Error GoTo ErrorHandler
  6.    SaveErrNum = 0
  7.    ' intitialise
  8.    s = "&H"
  9.    ' create hex string from each char
  10.    For i = 1 To Len(HexCurrency)
  11.         ' high order nibble
  12.        s = s & Hex((Asc(Mid(HexCurrency, i, 1)) And &HF0) / 16)
  13.        ' low order nibble
  14.        s = s & Hex(Asc(Mid(HexCurrency, i, 1)) And &HF)
  15.    Next i
  16.    ' hex to currency
  17.    Hex2Currency = CCur(s)
  18.    Exit Function
  19. ErrorHandler:
  20.    Hex2Currency = 0
  21.    SaveErrNum = 1
  22. End Function

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

GRACIAS POR LEER!!!