Concatenazione dati in variabile

Salve a tutti,
Stò scrivendo un programma che, scorrendo un array, legge lo stato di X Input Digitali per ricavarne un numero binario. In pratica X interruttori rappresentanti ognuno una cifra binaria.
Il problema è che non riesco a trovare sulla documentazione un operatore che mi permetta di concatenare dati ad una variabile (Qualcosa che faccia sulle variabili quello che += fa per le stringhe).

Non posso usare un array perché avrei bisogno di passare il numero risultante alla funzione int() per tornare in decimale. Vi prego, non ditemi che devo effettuare "a mano" la conversione binario-decimale, sono pigro ed ho finito il caffé =(

Un grazie in anticipo :slight_smile:

Cioè se tu hai nell'array arr:

arr[0]=1
arr[1]=1
arr[2]=1
arr[3]=0
arr[4]=1
arr[5]=0
arr[6]=1
arr[7]=0

Ti deve risultare in una variabile x => 01010111 ?
Se si, guarda la bitWrite()
http://arduino.cc/en/Reference/BitWrite

Questo workaround è perfetto. Grazie Mille!

Non esiste una funzione che concateni dei dati di tipo diverso dalle stringhe? Scendere a livello binario mi prolunga notevolmente i tempi di sviluppo...
In sintesi avrei bisogno di qualcosa che, a partire da A=1 e B=2 restituisca C=12, invece di C=3

Ma con la bitWrite() mica è difficile:

unsigned char x=0;
unsigned char arr[8];

void setup()
{ delay(1000);
  Serial.begin(9600);
  arr[0]=1;arr[1]=1;arr[2]=1;arr[3]=0;arr[4]=1;arr[5]=0;arr[6]=1;arr[7]=0;
  x=0; // clear all bits
  for(int i=0;i<=7;i++)
  { bitWrite(x,i,arr[i]);
  }
  Serial.println(x,HEX);
}
void loop() {}

Però, stiamo parlando di numeri binari o di che altro?
A=1, B=2 C=>12 non è mica logica binaria.
Per questo puoi usare la matematica:

C=B*10+A;

Ma assolutamente ogni variabile (cifra) deve essere tra 0 e 9 (cioè non ha senso se A=1 e B=15 C=???)

#include <math.h>
unsigned int x=0;
unsigned char arr[4];

void setup()
{ delay(1000);
  Serial.begin(9600);
  arr[0]=1;
  arr[1]=2;
  arr[2]=4;
  arr[3]=0;
  x=0; // clear 
  for(int i=0;i<4;i++)
  { x=x+arr[i]*pow(10,4-i);    // potenze del 10, elevato se i=0->4   i=1->3   i=2->2   i=3->1
  }
  Serial.println(x);
}
void loop() {}

Oppure le singole cifre le converti in singolo carattere (basta aggiungere 48) e poi lavori con i caratteri e alla fine usi atoi() per la conversione string->numero

int A=1; A=A+48; -> '1' come carattere ascii
int B=2; B=B+48; -> '2' come carattere ascii

Grazie Mille per i mille spunti! :slight_smile:
L'idea delle potenze del 10 mi ha fatto sentir stupido come poche altre cose prima d'ora (Anche se ad occhio l' implementazione mi sembra errata) :wink:

Biska:
(Anche se ad occhio l' implementazione mi sembra errata) :wink:

Vero, ho corretto sopra, indice va da 0 a 3 ma la potenza deve essere invertita da 4 a 1 (basta fare 4-i) :grin: