Conversione da HEX a DEC

Vorrei capire come fare a convertire dei valori esadecimali in decimali.

Cerco di spiegarmi meglio: con un Xbee collegato ad un Arduino UNO invio un valore intero pari a 333 in questo modo:

  pin5 = analogRead(5);
  payload[0] = pin5 >> 8 & 0xff;
  payload[1] = pin5 & 0xff;

e lo ricevo in esadecimale sull'altro Arduino in questo formato:

payload [18] is 1
payload [19] is 4D

Infatti 14D in esadecimale è 333 in decimale.

Vorrei ricomporre il valore in Arduino e vorrei capire se effettuando questa operazione:

analogValue = payload [19] + (payload[18]*256);

ottengo effettivamente il valore 333 o se l'operazione è sbagliata.

Voi che dite?

Più che altro ho dei dubbi sulla conversione del valore contenuto in payload[19] dato che comprende sia 4 che D.

Teoricamente, la conversione totale sarebbe: 1162 + 4 * 16 + 13 ( = D) = 333 (DEC)

Solo che io 4D me lo ritrovo in payload[19]..

Non serve la mascheratura perché il C fa il casting automaticamente.

  pin5 = analogRead(5);
  payload[0] = pin5 >> 8;   // high byte
  payload[1] = pin5;          // low byte

Vorrei ricomporre il valore in Arduino e vorrei capire se effettuando questa operazione:

analogValue = payload [19] + (payload[18]*256);

Per ricomporre il valore è necessario usare il casting esplicito in questo modo:

 analogValue = payload [19]
 analogValue += (int) payload[18] << 8;

Scusa se non ho risposto subito... per eliminare il vecchio Topic devi cliccare in basso a sinistra sulla voce "remove Topic", grazie.

Non stai facendo nessuna conversione HEX a decimale e viceversa. Quello che stai facendo é scomporre un numero a 16 bit in 2 da 8 bit e poi riunirli.
Ciao Uwe

Quindi mi basta ricomporlo così:

analogValue = payload [19]
 analogValue += (int) payload[18] << 8;

come suggerito da astrobeed per ottenere il valore inviato in origine?

Io comunque lo ricevo come esadecimale, o mi sbaglio? Forse non sto capendo bene..

Esadecimale, ottale, decimale, etc, sono solo rappresentazioni dello stesso numero in base diversa per noi esseri umani, per il microprocessore esiste solo il binario.

Non lo ricevi in esadecimale.
Esadecimale o decimale é un modo per visualizzare un mumero per noi uomini.
Tu ricevi 2 Byte; una ha il peso basso e l' altro ha il peso alto.
Immaginai come se hai un numero decimale a 3 cifre e ti trasmetti una cifra alla volta. per ricomporre il numero devi moltiplicre ile centiania con 100, i decimi com 10 e gli uni con 1 e tutti tre li sommi.
È la sessa cosa con i byte solo che il multiplicatore non é 10 ma 256.
Ciao Uwe