Hola como puedo convertir un valor Currency en Hexadecimal?
con la función Hex de vb me da desbordamiento
Debug.Print Hex(4294967295#)
Saludos.
Soluciando
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.
.
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:
Debug.Print BigHex(4295017296#) ' // Return C350 siendo que debe de ser en Hexadecimal --> 10000C350
P.D.: no funciona Mod con los currency ¬¬"
Dulces Lunas!¡.
.
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!¡.
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.
ahora que veo un poco mejor es utilzar la parte negativa para ampliar la capacidad de un long
.
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!¡.
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.
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!!!