Forum: Mikrocontroller und Digitale Elektronik Array kopieren


von Roland (Gast)


Lesenswert?

Hallo,
ich stehe momentan leider etwas auf dem Schlauch.

Ich habe zwei Arrays vom Typ unsigned char, array_a und array_b und 
möchte von b nach a kopieren aber in dieser Form:
1
array_a[0] = array_b[index];
2
array_a[1] = array_b[index+1];
3
array_a[2] = array_b[index+2];
4
array_a[3] = array_b[index+3];
5
array_a[4] = array_b[index+4];
6
7
array_a[5] = array_b[index];
8
array_a[6] = array_b[index+1];
9
array_a[7] = array_b[index+2];
10
array_a[8] = array_b[index+3];
11
array_a[9] = array_b[index+4];
12
bis 
13
array_a[98] = array_b[index+3]
14
array_a[99] = array_b[index+4]
also eigentlich die ersten 5 Einträge von array_b nach array_a[0-99] 
kopieren, möchte aber natürlich nicht 100 Zeilen schreiben.
"index" kann momentan einen Wert zwischen 0 und 90 haben.

Mit memcpy gehts ja nicht, da ja die Indexe von array_a und array_b 
verschieden sind.

Könnte mir mal jemand einen Tip geben?
Vielen Dank
Roland

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

So ginge das mit einer Schleife:
1
for (i = 0; i < 100; i++)
2
  array_a[i] = array_b[index + (i % 5)];

von avrm (Gast)


Lesenswert?

1
for (index = 0; i<=4; i++)
2
{
3
   for (i = 0; i<=100; i+5)
4
   {
5
      array_a[i] = array_b[index];
6
   }
7
}

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Roland schrieb:
> Mit memcpy gehts ja nicht, da ja die Indexe von array_a und array_b
> verschieden sind.

Geht trotzdem mit memcpy:
1
for (i = 0; i < 100; i += 5)
2
{
3
   memcpy (array_a + i, array_b + index, 5 * sizeof (unsigned char));
4
}

Sollte auch etwas schneller gehen als das Kopieren der einzelnen 
Elemente bis 100.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

avrm schrieb:
>    for (i = 0; i<=100; i+5)

Der Ausdruck i <= 100 ist falsch. Das gäbe einen fetten Pufferüberlauf, 
wenn Dein zweiter Fehler "i+5" ohne Zuweisung nicht vorher bereits zu 
einer Endlosschleife führen würde ;-)

von Roland (Gast)


Lesenswert?

Stimmt, an % hab ich garnicht gedacht.

Vielen Dank

von Thomas E. (thomase)


Lesenswert?

Roland schrieb:
> Stimmt, an % hab ich garnicht gedacht.
???

Roland schrieb:
> also eigentlich die ersten 5 Einträge von array_b nach array_a[0-99]
> kopieren,
Welchen Sinn soll das haben, den gleichen Inhalt 21 Mal im kostbaren RAM 
des Controllers zu haben? Zweimal ist schon einmal zuviel.

mfg.

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.