Forum: Mikrocontroller und Digitale Elektronik Ein char Array mit mehreren Arrays an einander reihen?


von M. G. (ixil96)


Lesenswert?

Hallo,

ich möchte 3 uint8_t Arrays verbinden und über die UART ausgeben.
1
uint8_t tx_sensor_data[26];
2
uint8_t sensor_data[9]; // z.B. 123456789
3
uint8_t tx_uncnf[] = {"mac tx uncnf "};
4
uint8_t crnline[] = {"\r\n"};

Das ganze soll dann so aussehen: "mac tx uncnf 123456789\r\n" und in 
tx_sensor_data übergeben werden.

das Ziel ist also: tx_sensor_data = tx_uncnf + sensor_data + crnline

Muss ich hier Stelle für Stelle also

tx_sensor_data[0] = tx_uncnf[0]
tx_sensor_data[1] = tx_uncnf[1]  usw...

eines Arrays auslesen und übergeben oder gibt es dafür auch eine 
einfachere Lösung?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?


von Einer K. (Gast)


Lesenswert?

> das Ziel ist also: tx_sensor_data = tx_uncnf + sensor_data + crnline

C++? Dann std::string oder Arduino String

C? Dann evtl sprintf()

von Theor (Gast)


Lesenswert?

@ M.G.

"Da stelle mer ons mal ganz domm ..." (Das soll ein Zitat aus der 
"Feuerzangenbowle" sein).

Oder, mit anderen Worten, man geht am besten von seinem eigenen 
Wissensstand aus und überlegt sich eine Lösung. Die versteht man dann 
auch ganz leicht und muss nicht lange herumrätseln. :-)

Es sollen die Zeichen aus drei verschiedenen Arrays ausgegeben werden.

Na, dann mach das doch einfach. :-)

1. fprintf (..., "%s", tx_uncnf);
2. fprintf (..., "%s", sensor_data);
3. fprintf (..., "%s", crnline);

Man kann das auch anders machen, und es existieren auch sinnvolle 
Gründe, das unter gewissen Umständen anders zu machen. Aber ohne 
Notwendigkeit, ohne guten Grund, nach Alternativen zu suchen, ist, 
meiner Meinung nach, sinnlos.

von Stefan F. (Gast)


Lesenswert?

Ich würde auch vermeiden, die Arrays zusammen zu kopieren, weil du damit 
den Speicherbedarf verdoppelst.

von GEKU (Gast)


Lesenswert?

M. G. schrieb:
> Das ganze soll dann so aussehen: "mac tx uncnf 123456789\r\n" und in
> tx_sensor_data übergeben werden.

Zunächst sollt klar sein ob man mit Strings oder Array of char arbeiten 
will.
1
uint8_t sensor_data[9]; // z.B. 123456789  //  123456789 geht sich als String in sensor_data[9] nicht aus!
2
uint8_t tx_uncnf[] = {"mac tx uncnf "}; // ist ein String
3
uint8_t crnline[] = {"\r\n"}; // ist ein String

Ich würde mit Strings arbeiten:
1
uint8_t tx_sensor_data[26];
2
uint8_t sensor_data[10]; // z.B. 123456789 
3
uint8_t tx_uncnf[] = {"mac tx uncnf "}; 
4
uint8_t crnline[] = {"\r\n"};
5
6
strcpy (sensor_data,"123456789");
7
int len=sprintf (tx_sensor_data,"%s %s %s",tx_uncnf,sensor_data,crnline);
8
9
// oder einfacher:
10
11
uint8_t tx_sensor_data[26];
12
uint8_t sensor_data[10]; // z.B. 123456789 
13
14
strcpy (sensor_data,"123456789");
15
int len=sprintf (tx_sensor_data,"mac tx uncnf %s \r\n",sensor_data);

von STK500-Besitzer (Gast)


Lesenswert?

eine packed struct aus den "Strings" zusammensetzen, und dann eine Union 
mit einem byte-Array der gleichen Länge.
Ist zwar beim Tippen ein Rattenschwanz, spart aber Speicher und 
irgendwelches printf-Geraffel.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.