Go Down

Topic: Invio Byte per configurare OUTPUT sul server (Read 2 times) previous topic - next topic

lollo1100



scusa Leo ero tornato un attimo anche sulla conversione da carattere ad array che mia avevi proposto tu immaginando che i due caratteri della
maschera siano chars[2] e chars[3] e la maschera è un array byte mask[8];

ho scritto questo codice probabilmente sbaglio sulla sottrazione però non so come fargli prendere il valore ASCII corrispondente... guarda posto il codice errato



Se devi isolare un range di valori, non importa che ti metta a fare una serie infinita di || (OR logici). Basta un paio di test con maggiore/uguale e minore/uguale. Inoltre ricorda che i char sono anche byte in memoria.
Quindi
Code: [Select]
if (chars[x] >='A' && chars[x] <='F') {
funziona come
Code: [Select]
if (chars[x] >= 65 && chars[x] <=70) {



ma chars
  • quindi vale anche come il corrispondente codice ASCII del carattere ad esempio chars
  • = 'A' vale appunto 'A' ma anche 65 giusto?

leo72


ma chars
  • quindi vale anche come il corrispondente codice ASCII del carattere ad esempio chars
  • = 'A' vale appunto 'A' ma anche 65 giusto?

Scusami ma, se dopo 6 pagine in cui te lo ripetuto specificato più volte, hai ancora dei dubbi circa il fatto che, usando i char, 'A' è equivalente a 65, allora comincio a disperarmi...  :smiley-sweat:

lollo1100



ma chars
  • quindi vale anche come il corrispondente codice ASCII del carattere ad esempio chars
  • = 'A' vale appunto 'A' ma anche 65 giusto?

Scusami ma, se dopo 6 pagine in cui te lo ripetuto specificato più volte, hai ancora dei dubbi circa il fatto che, usando i char, 'A' è equivalente a 65, allora comincio a disperarmi...  :smiley-sweat:


Dai era solo x sentirmelo dire un'altra volta :)  :smiley-mr-green:

leo72

Ultima volta, però  ;)
"un char ed un byte sono un modo diverso di rappresentare la stessa informazione"

Se in una cella di memoria hai il valore 65, se lo assegni ad una variabile di tipo "byte", 65 sarà 65.
Se lo assegni ad un char, esso sarà 'A' (che è il codice ASCII di 65) oppure 65, a seconda che lo tratti come carattere o come numero.

lollo1100

#79
Mar 04, 2013, 02:01 pm Last Edit: Mar 04, 2013, 03:53 pm by lollo1100 Reason: 1

Se il carattere è compreso fra '0' e '9', sottrai 48, se invece è compreso fra 'A' e 'F' sottrai 55.
Ricordati che l'ASCII di '0' è 48, quindi ad esempio 48-10=0 per cui '0' vale 0 appunto.
L'ASCII di 'A' è 65, sottraendo 55 hai 10, che è il suo valore in esadecimale.
Il valore ottenuto dalla prima cifra la moltiplichi per 16 e poi ci sommi il valore della seconda cifra.
Esempio:
D4
D=68  -->   68-55=13

4=52  -->  52-48 = 4
(13*16)+4=212


Hai così il tuo valore decimale. Adesso per estrarre i singoli bit usa la funzionre bitRead e popoli il tuo array.


Leo scusa ho provato a fare come dici tu: non so se ho capito male

Code: [Select]

byte MSK[8];

void convertiHEX(){
 int val1 = 0;
 int val2 = 0;
 int valore = 0;

 if ( CMD[2] >='A' && CMD[2] <='F' )    
   val1 = CMD[2] - 55;
 else
   if ( CMD[2] >= '0' && CMD[2] <= '9' )
   val1 = CMD[2] - 48;

 if ( CMD[3] >='A' && CMD[3] <='F' )    
   val2 = CMD[3] - 55;
 else
   if ( CMD[3] >= '0' && CMD[3] <= '9' )
   val2 = CMD[3] - 48;

 valore = (val1*16) + val2;
 Serial.println(valore);
 for ( int i = 0; i < 8 ; i++ ){
   MSK[i] = bitRead(valore,i);
   Serial.println(MSK[i]);
 }
}


su CMD[2] e CMD[3] ci sono i due caratteri esadecimali della maschera e MSK è un array a 8 posizioni dove va la maschera in binario
però non funziona
scusa Leo funziona

Go Up