Programación Específica > Soluciones de Hard y Soft
Float Formato Microchip En Vb
(1/1)
Huguen_aus_Tirol:
Hola a todos! Después de algún tiempo, hoy me encuentro algo generoso, asi que quiero compartirlo con ustedes... Aquí van unas funciones para VB que nos permiten, una convertir un numero binario en formato float de Microchip a su equivalente real, y las otras dos la inversa. Son dos, una para calcular el exponente, y la otra para la mantisa. Espero les sirva... :)
Más información en la página de Microchip (Hace falta decirlo? ;) )
Ah!!! Gracias Jonathan por la respuesta en el foro de VB; si bien no era la solución a mi problema, sí me sirvió muy bien para encarar el problema y ya está solucionado. Muchas gracias!
--- Código: Text --- 'Funcion que convierte un numero en formato float a realPublic Function Hex_Float(Exp As Integer, Mantisa As Long) As Single Dim Sign As Boolean Dim Man_bin(23) As Byte Dim i As Byte Dim Res_float As Single 'determino exponente, en base a 0x7F Exp = Exp - &H7F 'Extraigo signo If Mantisa >= &H800000 Then Sign = True Else Sign = False End If 'Normalizo a 1.xxx Mantisa = Mantisa Or &H800000 'Convierto a real i = 23 Do Man_bin(i) = Mantisa Mod 2 If Man_bin(i) = 1 Then Res_float = Res_float + 2 ^ (-1 * i) End If Mantisa = Mantisa \ 2 i = i - 1 Loop While Mantisa > 1 Man_bin(i) = Mantisa Res_float = Res_float + 2 ^ (-1 * i) 'Signo? If Sign Then Res_float = -1 * Res_float End If 'Multiplico por el exponente Res_float = Res_float * (2 ^ Exp) Hex_Float = Res_float End Function
--- Código: Text --- 'Funcion que devuelve la mantisa de un numero realPublic Function Float_Mantisa(Num As Single) As Long Dim Exp As Integer Dim Normalize As Single Dim Bin(23) As Byte Dim i As Byte Dim aux As Long 'Obtengo el exponente Exp = Float_Exp(Num) Exp = Exp - &H7F 'Normalizo Normalize = Abs(Num) / (2 ^ Exp) 'Convierto en array binario (24bits) For i = 0 To 23 If Normalize >= 2 ^ (-1 * i) Then Bin(i) = 1 Else Bin(i) = 0 End If Normalize = Normalize - (Bin(i) * 2 ^ (-1 * i)) Next 'Convierto array binario en valor de la mantisa aux = 0 Bin(0) = 0 For i = 0 To 23 aux = aux + Bin(23 - i) * 2 ^ i Next 'Determino el signo If Num < 0 Then aux = aux Or &H800000 End If Float_Mantisa = aux End Function'Funcion que determina el exponente de un numero realPublic Function Float_Exp(Num As Single) As Byte Float_Exp = Int(Log(Abs(Num)) / Log(2)) + &H7F End Function
Navegación
Ir a la versión completa