Ein char Array mit mehreren Arrays an einander reihen?

OP #5964959
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?
Gast #5964980
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.
Gast #5965018
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);
Gast #5965581
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren