Wie verketten von zwei byte-arrays in C?
Ich bin-Kodierung auf der Arduino-Plattform und ich bin versucht, zu schreiben, etwas, das verketten/append byte-arrays in C.
byte a[] = {a1, ..., an};
byte b[] = {b1, ..., bm};
byte c[] = a + b; //equivalent to {a1, ..., an, b1, ..., bm}
Was ist der beste Weg, um das obige Ergebnis?
Ich habe versucht, online-Suche, aber ich habe nicht hatte vieles Glück. Ich sah eine andere Antwort auf SO Hervorhebung der Schritte, die benötigt werden, um dies zu tun, jedoch konnte ich nicht Folgen. Sie sagen auch, dass es gibt Bibliotheken, die sich mit dieser Art der Sache, aber da bin ich auf Arduino bin ich unsicher, ob oder nicht diese sind völlig verfügbar für mich.
Ich verstehen, muss es irgendeine Art von Speicher-manipulation, um für diese zu arbeiten, aber ich bin neu auf diese Art von low-level-Manipulationen, so dass Sie nicht zu viel Sinn für mich. Ich habe Erfahrung in höheren Programmiersprachen (C#, Java und etwas C++).
Sollte ich auch hinzufügen: es Kann die gleiche Technik für sich arbeiten:
byte a[] = {a1, ..., an};
byte b[] = {b1, ..., bm};
a = a + b
- Sind die Größen fest?
- vorausgesetzt
byte
ist einchar
Größe entspricht,byte c[sizeof(a) + sizeof(b];
und zweimemcpy
ruft es tun würde, wenn das wirklich so ist, wiea
undb
deklariert werden. - Ja. a und b deklariert sind, wie diese. Allerdings habe ich editiert, die Frage zu enthalten, der Fall, wenn b angehängt zu einem als gut.
- das wird nicht passieren, es sei denn
a
ist zunächst sortiert, um die Daten aufzunehmen, und Raum für die angehängten Daten Und einememcpy
-Typ-operation, ist immer noch beteiligt, früher oder später. Unabhängig davon, sind die syntax, die Sie verwenden ist definitiv nicht deckungsgleich mit der C-Sprache. - Ja. Ich bin mir bewusst, dass es definitiv nicht C. ich habe es geschrieben in einem pseudo-Stil besser zu erklären, meine Probleme.
- bei komplexeren Fällen, z.B. wo Sie die Größe zur Laufzeit erfordern würde
malloc()
für den ersten Fall, undrealloc()
im zweiten Fall, aber alle von Ihnen verwenden würdememcpy()
um die Daten zu kopieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine
byte
Typ in C. es sei denn, es ist eine Typ-definition, Sie könnte verwendenunsigned char
oder einen festen Typ von<stdint.h>
tragbar. Wie auch immer, hier ist die Lösung:Stellen Sie sicher, dass array
a
hat Platz für mindestensn + m
Elemente (hiern = 3
undm = 3
auch), um Probleme zu vermeiden, die mit array-überlauf (d.h. Undefiniertes Verhalten, das kann Abstürzen, yor-Programm oder noch schlimmer).a
+ die angehängteb
offensichtlich.c
, vorausgesetzta
undb
voll sind, wir würden machen müssenc
die "Länge" von a + b und kopieren Sie dann mitmemcpy()
in cb
danna
. Was ich bin nicht sicher aber ist dasa+3
syntax, die Sie verwendet haben. Was bedeutet das?a=a+b
Fall. In der Reihenfolge derc=a+b
Sie müssen kopierena
zuc
, dannb
zuc+n
. Diec+n
arbeitet in der gleichen Weise wiea+3
. Diea
"zerfällt" (oder mehr formaly umgewandelt wird), um die Adresse des ersten Elements im array. Durch+
Bediener eine ganze Zahl, die Sie durchführen, Zeiger-Arithmetik. Diea+3
entspricht&a[3]
also ich glaube, Sie bekommen nun eine Idee.Wenn die Größen bekannt sind, können Sie einfach erstellen Sie ein neues byte-array dieser Größe und verwenden Sie einfache loops zu füllen.