Convertire un intero (int) in due byte (RISOLTO)

Ciao,
scusate la domanda, ma non trovo esempi semplici, mentre per convertire 2 byte in un intero faccio così:

intero = byte1 * 256 + byte0;

come si fa per il contrario? Ovvero dividere un intero in 2 byte (H e L)?
Grazie (RISOLTO)

dovrebbe essere: highByte() e lowByte()

HByte=intero/256 o intero>>8;
LByte=intero%256.

Datman, devo proprio usare quelle due funzioni? Proverò, grazie :slight_smile:
Orso, non ho capito come intendi tu...

ciao...sono due funzioni già presenti...guardati i due link alla reference

https://www.arduino.cc/en/Reference/LowByte

https://www.arduino.cc/en/Reference/HighByte

Sì… In effetti, per il LowByte basta fare un AND con FF:

LByte=intero&0xFF
oppure:
LByte=intero&256

che è ciò che viene fatto dalla funzione apposita :slight_smile:

Al massimo un And, non certo un Or ;).

Datman:
Sì... In effetti, per il LowByte basta fare un OR con FF:

Grazie all'autocasting del C è sufficiente assegnare la variabile int ad una unsigned char per ottenere il low byte.

Esempio pratico:

int a;
byte b;

b=a;

Dopo l'assegnazione b contiene gli 8 bit low di a.

Per ottenere gli 8 bit alti il modo migliore, come già suggerito da Datman, è fare uno shift a destra di 8,

b = a>>8;

Questo perché dal punto di vista del assembly è molto più perfomante fare uno shift, esiste una apposita istruzione in linguaggio macchina, lsl (sinistra) o lsr (destra), piuttosto della divisione tra due numeri.

Per dirla tutta alcuni compilatori, in fase di ottimizzazione, se trovano una divisione per potenze di due usano automaticamente la shift invece di fare la divisione, non ho mai verificato se avr-gcc esegue questa ottimizzazione oppure no.

Grazie a tutti, ottime spiegazioni :smiley:
Molto facile quella illustrata nel reference...

… ma molto istruttive le altre! :slight_smile:

P.s.: Sì, naturalmente è AND. Perdonatemi. Ho corretto.

Si vero, è un bagaglio di esperienze che fa sempre comodo, ogni situazione richiede modi diversi di fare le cose, tutto fa comodo :wink:
Grazie ancora