Zwei Arrays zusammenfügen

Hi,

ich hab zwei arrays, welche ich zusammenfügen will.

byte Anfang = {1, 2, 3, 4};
byte Mitte = {5,6,7,8};

Ales Ergebnis soll "1,2,3,4,5,6,7,8" rauskommen.

Momentan versuche ich dies mit einer for-SChleife hinzubekommen. Es funktioniert aber einfach nicht.
Jemand eine Idee?

Gruß Grave

Du brauchst ein drittes Array. Zum Kopieren von Arrays gibt es memcpy()

Aber wie. Kann ich mit memcpy angeben an welche Stelle im Array das zweite kopiert werden soll?

Mutscheid1:
Aber wie. Kann ich mit memcpy angeben an welche Stelle im Array das zweite kopiert werden soll?

Siehe memcpy - C++ Reference.

Gruß

Gregor

Mutscheid1:
Aber wie. Kann ich mit memcpy angeben an welche Stelle im Array das zweite kopiert werden soll?

zielarray+4

Gruß Tommy

@Tommy56: ???

Die Referenz zu memcpy musst Du schon selbst lesen. Ansonsten Pointerarithmetik. Kopiere nach Anfang Zielarray+4 Elemente (Byte).

Gruß Tommy

Du solltest verstehen dass Array-Variablen äquivalent zu Zeigern auf das erste Element sind. Wenn man da also einen Wert dazu addiert ist man weiter hinten im Array

Sorry, kann euch aber nicht folgen. Mit dem letzten Wert gebe ich doch memcpy an, wieviele bytes kopiert werden sollen. Wie soll ich denn hiermit hinbekommen, dass er "Mitte" nach "Anfang" kopiert?

Und den ersten Parameter für die Ziel-Adresse ignorierst du einfach? :confused:

void setup()
{
  Serial.begin(9600);

  byte anfang[] = { 1, 2, 3, 4 };
  byte mitte[] = { 5, 6, 7, 8 };
  byte neu[sizeof(anfang) + sizeof(mitte)];

  memcpy(neu, anfang, sizeof(anfang));
  memcpy(neu + sizeof(anfang), mitte, sizeof(mitte));

  for (byte b : neu)
    Serial.println(b);
}

Achtung: sizeof() liefert die Größe in Bytes. Das geht so direkt also nur mit Byte Array

Ich nehme in Kauf, das mir das um die Ohren gehauen wird.
Das ist nur ein Ansatz.

Mutscheid1:
ich hab zwei arrays, welche ich zusammenfügen will.

byte Anfang = {1, 2, 3, 4};
byte Mitte = {5,6,7,8};

Ales Ergebnis soll “1,2,3,4,5,6,7,8” rauskommen.

Momentan versuche ich dies mit einer for-SChleife hinzubekommen. Es funktioniert aber einfach nicht.
Jemand eine Idee?

Ja.
Leider fehlt dein Codeschnipsel, an dem man weiter arbeiten könnte, bzw. sieht, was Du hast.
Du brauchst ein Zielarray, dessen Größe mindestens der Summe der Größen des Inhaltes Anfang und Mitte plus 1 entspricht.
Als ersten Versuch baue ein Zielarray mit [9] und nimm Deine for-Schleife für den ersten Teil.

Warum [9] kannst Du auf Tommy56’s-Website entnehmen.
Der zweite Teil muss dann hinten angefügt werden.

  for (int i = 0; i < 5; i++)
   {
   Ziel[4 + i] = Mitte[i];
   }

Dann kannst Du nachsehen, wo Du Deinen Fehler gemacht hast.
Und dann kannst Du ans verbessern gehen.

Sollte hier vorher schon die Lösung gekommen sein las mich einfach liegen - aber ich sehe heute die Nachrichten wieder erst ewig später.

my_xy_projekt:
Als ersten Versuch baue ein Zielarray mit [9]

Das ist ein Byte Array. Kein String!

Und sauber macht man es mit sizeof(). Dann macht man weniger Fehler mit den Array-Grenzen und es passt sich automatisch an die Größe der Arrays an

Zum nachbauen für den OP:

byte Anfang[5] = {1, 2, 3, 4};
byte Mitte[5] = {255, 254, 253, 'a'};
byte Ziel[9];
void setup()
  {
  Serial.begin(115200);
  // put your setup code here, to run once:
  }

void loop()
  {
  for (int i = 0; i < 5; i++)
    {
    Ziel[i] = Anfang[i];
    }
  for (int i = 0; i < 5; i++)
    {
    Ziel[(4 + i)] = Mitte[i];
    }
  for (int i = 0; i < 8; i++)
    {
    Serial.print(i);
    Serial.print("/");  
    Serial.println(Ziel[i]);
    }
  delay(5000);
  // put your main code here, to run repeatedly:
  }

Ausgabe auf dem seriellen Monitor:

21:05:18.231 -> 0/1
21:05:18.231 -> 1/2
21:05:18.231 -> 2/3
21:05:18.231 -> 3/4
21:05:18.262 -> 4/255
21:05:18.262 -> 5/254
21:05:18.262 -> 6/253
21:05:18.262 -> 7/97

97 ist das byte für ‘a’

Serenifly hat insoweit recht, das auch 8 reicht, aber ich hatte extra gesagt, das es ein Ansatz ist und dann aus diesem die Lösung zu erarbeiten und später aufzuräumen.

Daher auch der Tenor auf tommys page.

(Da Du deinen editiert hast, schieb ich den mal nach) :wink:

my_xy_projekt:
Warum [9] kannst Du auf Tommy56's-Website entnehmen.

Lege mir bitte keine Falschaussagen in den Mund, die ich nie getätigt habe. Du hast da wohl einiges nicht verstanden.

Bei mir geht es um Zeichenketten, da muss die '\0' hinten dran.
Hier geht es um einfache Arrays, da genügt die Summe der Elemente.

const byte Anfang[4] = {1, 2, 3, 4};
const byte Mitte[4] = {255, 254, 253, 'a'};
const byte laengeA = sizeof(anfang);
const byte laengeM = sizeof(Mitte);
byte ziel[laengeA+LaengeM];

...
memcpy(ziel,Anfang,laengeA);
memcpy(ziel+laengeA,Mitte,laengeM);

Gruß Tommy

Tommy56:
Lege mir bitte keine Falschaussagen in den Mund,

Habe ich nicht.

Ich habe darauf hingewiesen, das ich mit dem Vorgelegten versuche auf dem aufzubauen, was der OP haben könnte, da er keinen eigenen Code liefert; und es weiterführende Informationen dort gibt, wo sie (für mich) richtig und verständlich sind.

Um Mißverständnisse zu vermeiden werde ich es versuchen in Zukunft darauf zu verzichten.

Ich denke damit ist es gut.