Vai al contenuto
PLC Forum


Conversione Char-hex - Info software conversione caratteri contenenti numeri esadecimali


Messaggi consigliati

Inserito:

Salve a tutti,

ho bisogno di convertire otto caratteri contenenti un numero esadecimale in un numero esadecimale.

mi dite la strada più breve ?

Grazie


Inserita: (modificato)

Be se dai un occhio alla guida in linea si Simatic Step7 trovi che ogni "char" è lungo 1 byte e che viene scritto un valore in formato ACSII, per tanto recuperi la tabella dei carratteri ASCII e ti crei una funzione matematica che ti fornisca il numero tipo, te la butto li senza controllare i numeri ma solo come concetto di base:

Ipotizzando che i numeri siano da Cod. ASCII 20 a Cod. ASCII 29,

estrapoli il valore di ogni byte che compone la tua stringa e poi

L MB1 // Carico il primo carattere
L 20   // Carico il valore ASCII del numero zero
-I
T MB10 // Copio il risultato nel Byte

Questo è quello che farei io, ma forse esistono metodi migliori e più rapidi.

Modificato: da TravelMen
Inserita:

Il concetto è corretto, ma è sbagliato il numero 20.

Il codice ASCII corrispondente al carattere "0" è infatti 48 (30Hex).

Poi c'è da tener presente che la semplice sottrazione del valore 48 vale per i caratteri da "0" a "9".

I codici ASCI dei caratteri da "A" ad "F" vanno invece da 65 a 69 (da 41Hex a 45Hex)

Nel caso sia possibile utilizzare anche i caratteri da "a" ad "f", per questi i codici vanno da 97 a 102 (da 61Hex a 65Hex).

Inserita: (modificato)
te la butto li senza controllare i numeri ma solo come concetto di base:

Grazie batta, non avendo sotto mano la tabella ASCII ho solo buttato giù il concetto,

otto caratteri contenenti un numero esadecimale in un numero esadecimale.

Ancora più giusto batta, non avevo considerato che il valore è in formato hex,

Modificato: da TravelMen
Inserita:

Quindi , vediamo se ho capito bene :

avendo la tabella ASCII sotto mano potrei:

leggere il carattere

se il carattere è compreso tra 0 e 9 sottraggo la costante che mi permette di arrivare al numero 0..9

poi la trasferisco in un byte.

stessa cosa, ma con una costante di sottrazione diversa, faccio per i caratteri che vanno da 'A' a 'F'.

avrei quindi un carattere che mi corrisponde ad un valore, e questo valore sta in un byte.

8 byte sono una doppia word e dovrei risolvere il mio problema.

E' cosi che ho interpretato le vostre risposte !

E' CORRETTO ??

GRAZIE

Inserita:

Si esatto, se poi vai sul . si step7 e cerchi string, ti appare in maniera molto chiara, come è composta una stringa in step7.

Se poi dovessi avere dei problemi noi siamo qua.

Inserita:

puoi semplificare

sottrai d'ufficio '0' (0x30) se è minore di 9 hai finito

altrimenti il numero è 'A'..'F' sottrai ancora 7

se è maggiore di 0x0F allora è 'a'..'f' sottrai ancora 32

se non è A..F numero sbagliato

altrimenti ok passi al prossimo

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...