Pages: [1]   Go Down
Author Topic: Stampa di un array.  (Read 724 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti, ho un piccolo problema.
Ho un array contenente i valori estratti da una seriale rs232, ogni elemento dell'array è una lettera o un numero del messaggio inviato tramite rs232.
Vorrei spedire il messaggio ricevuto tramite pagina php. Avrei bisogno di riunire i dati contenuti nell'array in una stringa, per avere un solo elemento da inviare e non 1000.
Aspetto vostre notizie, grazie!
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10105
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

qualcosa tipo questo?

Code:
String tutto ="";
for (int i=0;i<lunghezzaArray;i++){
   tutto = tutto + array[i];
}
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I numeri devi rappresentarli sottoforma di stringa ? In quel caso ci vuola una sprintf o una itoa prima della concatenazione.
Logged

rome
Offline Offline
Sr. Member
****
Karma: 15
Posts: 474
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mah. usare il tipo stringa che "cresce" in un loop è la strada più veloce per esaurire la memoria dii arduino runtime :-)

Ma una bella strcat?

Code:
#define MAX_STR_LEN 512
...
char tutto[MAX_STR_LEN];
char buf[5];
...
for (int i=0;i<lunghezzaArray;i++){
   strcat(tutto,itoa(buf,array[i],10));
   }

più o meno (non l'ho testata) e assumando che array[] sia un array di int.
Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

brunialti, per quanto preferisca la tua soluzione a quella con la String, direi che il modo migliore per esaurire la ram è allocare buffer grandi quanto 1/4 la ram stessa smiley-razz
Logged

rome
Offline Offline
Sr. Member
****
Karma: 15
Posts: 474
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eh dai, non fare così...  smiley-confuse la dimensione la decidi tu, ovviamente, in base al calcolo della lunghezza dell'array... o della lunghezza della stringa di stampa... e poi almeno la esaurisco alla compilazione e non al runtime ...
Ricordati che ogni volta che usi operatore + con string, bisogna fare un realloc implicito. con il pericolo (o la certezza se sei pessimista) che se la stringa non riesce ad espandersi in una area contigua, alloca un novo spazio lasciando i famosi "buchi" nella memoria heap. come un formaggio svizzero
« Last Edit: October 02, 2012, 02:19:57 pm by brunialti » Logged

rome
Offline Offline
Sr. Member
****
Karma: 15
Posts: 474
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

va bene. proviamo una altra via. visto che leggi da una seriale, immagino che i caratteri siano o numeri interi di tipo byte (uint_8) o char.
A questo punto usi una bella union sul tuo buffer che cosè potrai "vedere ed usare" sia come byte che come char a seconda della necessità e inoltre non allochi due buffer (uno per array e uno per stringa). Basta mettere un bel "tappo" alla stringa (uno 0 alla fine dei caratteri letti da rs232).

Code:
union rs_buf{
  byte b[512];  // o lungo quanto ti pare alla faccia di tuxduino :-)
  char c[512];
  };

rs_buf array;

ma guarda che mi tocca fare per farvi contenti ....
« Last Edit: October 02, 2012, 02:29:27 pm by brunialti » Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

:-D
Logged

Pages: [1]   Go Up
Jump to: