Convertir de IEEE754 de precisión simple a valor decimal.

Iniciado por Impersecuto, 18 Noviembre 2010, 16:21 PM

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

Impersecuto

Hola, necesito crear una rutina en VB6 que convierta una cadena hexadecimal con formato de coma flotante de precisión simple conocida como IEEE754 a un valor decimal.

Por favor, si alguien sabe cuál es la formula para crear las líneas de código que realicen tal acción y me lo puede indicar, se lo voy a agradecer muchísimo.

De antemano muchas gracias.

Saludos.

Impersecuto de Chile

"Porque no tenemos nada queremos hacerlo todo"

Karcrack

#1
Hasta donde he podido saber el IEEE754 no se representa como cadena Hexadecimal...
http://en.wikipedia.org/wiki/IEEE_754-2008#Basic_formats
Por ejemplo el -118,625 es 1 10000101 11011010100000000000000

MOD:
Es esto lo que buscas?
http://babbage.cs.qc.edu/IEEE-754/32bit.html

Impersecuto

Cita de: Karcrack en 18 Noviembre 2010, 17:04 PM

MOD:
Es esto lo que buscas?
http://babbage.cs.qc.edu/IEEE-754/32bit.html

Así es, es exactamente eso, de hecho, he estado usando el convertidor de ese sitio web para obtener resultados que me permitan seguir avanzando en el programita que estoy creando, pero ya ha llegado el momento de programar ese procedimiento para integrarlo definitivamente y es ahí donde estoy detenido. Cualquier ayuda la agradeceré mucho.

Saludos.
Impersecuto de Chile

"Porque no tenemos nada queremos hacerlo todo"

Karcrack

El codigo javascript que utiliza parece bastante complejo...
Mas tarde si puedo intento hacer una funcion...

Un saludo ;)

Karcrack

#4
Despues de googlear he encontrado una forma hardcodeada de hacerlo:
Código (vb) [Seleccionar]
Private Function IEEE754toDouble(ByVal lNum As Long) As Double
   ' http://stackoverflow.com/questions/1597709
   IEEE754toDouble = (lNum And &HFFFFFF) * (1 / (2 ^ 23)) * (2 ^ ((((lNum And &HFF800000) \ &H800000) And &HFF) - 127))
End Function

He probado con algunos valores y funciona :)

Impersecuto

Muchas gracias Karcrack, estoy tratando de desentrañar la función, pero no entiendo como aplicarlo, donde y en que formato va el hexadecimal a ingresar y como retorna el resultado.

Gracias de nuevo.

Saludos.
Impersecuto de Chile

"Porque no tenemos nada queremos hacerlo todo"

Karcrack

Cita de: Impersecuto en 18 Noviembre 2010, 20:24 PM
Muchas gracias Karcrack, estoy tratando de desentrañar la función, pero no entiendo como aplicarlo, donde y en que formato va el hexadecimal a ingresar y como retorna el resultado.

Gracias de nuevo.

Saludos.
Si no tienes ni idea de VB tal vez deberias utilizar otro lenguaje para esto... ya que, bueno, VB no es muy bueno que digamos para trabajar con numeros...

La cosa seria asi:
MsgBox IEEE754toDouble(&HABCEDF)