Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Convertire in numero una serie di byte hex


Messaggi consigliati

Inserito: (modificato)

Buongiorno a tutti,

sono nuovo sulla sezione "linguaggi di programmazione" perchè sono nuovo anche nel mondo c# e VB (ho pochissime nozioni, ho sempre programmato plc). Oggi mi ritrovo con la necessità di leggere e scrivere dei dati da un database di un plc siemens S7-300 con VB.Net (Visual studio 2015 - Visual basic). 

Domanda: se ho una serie di 4 byte in HEX, come faccio ad unirli e a convertirli nel numero reale corrispondente?

Esempio: byte 0 = 00; byte 1 = 80; byte 2 = 1D; byte 3 = 44, corrisponde a 630.0 (6.300000e+002)

Grazie

Modificato: da marcob1984

Inserita: (modificato)

Puoi usare la classe "BitConverter" con il metodo "BitConverter.ToSingle".

Dai un'occhiata qui

Ciao

 

Modificato: da lucios
Inserita:

Guarda che 0x00801D44 non fa di certo 630 manco a girarlo, ma bensì 8396100...

Inserita:

sarà nuovo anche in sistemi di numerazione.....:whistling:

Inserita: (modificato)

Grazie Lucios per la tua risposta. Proverò la tua soluzione e ti farò sapere.

Per GiRock e dott.cicala: vi illustro la situazione che mi ritrovo nel database del PLC: ho dichiarato un numero di tipo REAL e gli ho assegnato un valore correspondente a 630.0 (6,300000e+002). La memoria di questo "REAL" occupa 4 byte. Se visualizzo i 4 byte splittati su una VAT (tabella delle variabili) leggo i valori in HEX postati sopra. Se aprite un qualsiasi sito (es: http://gregstoll.dyndns.org/~gregstoll/floattohex/ o http://www.h-schmidt.net/FloatConverter/IEEE754.html )in cui potete fare la conversione da HEX a Float, scoprirete che inserendo il valore "441D8000" vi darà come risultato 630.0.

Modificato: da marcob1984
Inserita:

Grazie Lucios, è proprio la "classe" che mi serviva, provato e funziona.

GiRock, la tua conversione è semplicemente da HEX a DEC. Nella mia domanda iniziale avevo chiaramente scritto "convertirli in reale", che equivale a dire floating point. Forse non ero stato chiaro, correggimi se sbaglio

Inserita:

Esempio: byte 0 = 00; byte 1 = 80; byte 2 = 1D; byte 3 = 44, corrisponde a 630.0 (6.300000e+002)

 

30bc2d4c96ee7af8a5dcb3044a35bba9.jpg

Inserita:

Non c'è di che.

La classe BitConverter è veramente molto utile :thumb_yello:

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...