Visual Basic.NET - conversion Hex a Real (no decimal)

 
Vista:

conversion Hex a Real (no decimal)

Publicado por Miguel Torres (1 intervención) el 06/09/2011 19:43:12
Pues la cuestion es que usaba un producto de la casa circutor que se lee en Modbus y los datos los lanza en hex y hay que convertirlos a Decimal osease que para ellos 00 00 00 D4 representan 212 (voltios) y ahora quiero cambiar por Siemens Sentron y ellos lo envian tambien por Modbus y tambien en hex pero hay que convertirlos en numero real con mantisa?????? y la verdad no se como hacelo,,,,,,, para ellos 43 68 70 22 es 232,438 (voltios)

os pongo el trozo de conversion a Decimal para haber si alguien sabe hacerlo y convertir lo que entra que es hexa en Real,,,, yo en programación de automatas me sale facil,,,, pero en VB.NET pues no.........


'cada caràcter són 2 xifres hexa. Cada 8 xifres hexa un valor decimal
cadena = cadena & cadena2
While (i <= Len(cadena))
numd = ""
For j = 1 To 4
Car = Asc(Mid$(cadena, i, 1))
numh = Hex(Car)
If Len(numh) = 1 Then
numh = "0" & numh
End If
numd = numd & numh
i = i + 1
Next j

numdec = Val("&H" & numd) 'nombre decimal
If numdec < 0 And Mid$(numd, 1, 1) <> "F" Then
numdec = bin_hex(numd)
End If
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

conversion Hex a Real (no decimal)

Publicado por Joan B. Fabregas (129 intervenciones) el 07/09/2011 17:29:29
Hola Miguel,

Partiendo del ejemplo que nos dices en el que 43 68 70 22 es 232,438, veo que para la transformación estan usando el estándar IEEE 754 (Información Wikipedia).

En esta página hay información detallada del algoritmo para convertir los valores de HEX a DEC: http://www.carlospes.com/curso_representacion_datos/06_01_estandar_ieee_754.php, y en esta un conversor web (en inglés): http://babbage.cs.qc.edu/IEEE-754/Decimal.html

Si no consigues realizar el algoritmo en codigo .net deja un mensaje en el foro.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

conversion Hex a Real (no decimal)

Publicado por lareost (3 intervenciones) el 15/09/2011 15:31:25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Function HexToSingle(ByVal value As String) As Single
 
    Dim bytes(3) As Byte
    Dim c As Integer = 0
    For i As Integer = 0 To value.Length - 1 Step 2
        bytes(c) = Byte.Parse(value.Chars(i) & value.Chars(i + 1), _
                              System.Globalization.NumberStyles.HexNumber)
        c += 1
    Next
 
    Array.Reverse(bytes)
    Return BitConverter.ToSingle(bytes, 0)
 
End Function
 
 
Private Sub test()
    Dim hexNum As String = "43687022"
    Dim result As Single = HexToSingle(hexNum)
    System.Diagnostics.Debug.Print (result.ToString)
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar