Comment concaténer deux tableaux d'octets en C?
Je suis de codage sur la plate-forme Arduino et je suis en train d'écrire quelque chose qui va concaténer/ajouter des tableaux d'octets dans C.
byte a[] = {a1, ..., an};
byte b[] = {b1, ..., bm};
byte c[] = a + b; //equivalent to {a1, ..., an, b1, ..., bm}
Quelle est la meilleure façon d'obtenir le résultat ci-dessus?
J'ai essayé de chercher en ligne, cependant je n'ai pas eu beaucoup de chance. J'ai vu une autre réponse sur tout en soulignant les étapes nécessaires pour ce faire cependant, je ne pouvais pas les suivre. Ils disent aussi qu'il y a des bibliothèques qui traitent de ce genre de chose, cependant comme je suis sur un Arduino, je ne suis pas sûr de savoir si ou de ne pas être totalement disponible pour moi.
Je comprends, il doit y avoir une sorte de manipulation de la mémoire dans l'ordre pour que cela fonctionne, cependant je suis nouveau à ce genre de bas niveau de manipulations afin de ne pas faire trop de sens pour moi. J'ai de l'expérience dans le supérieur, dans les langages (C#, Java et en C++).
Je dois également ajouter: Pouvez la même technique de travail pour:
byte a[] = {a1, ..., an};
byte b[] = {b1, ..., bm};
a = a + b
en supposant que
byte
est un char
de taille équivalente, byte c[sizeof(a) + sizeof(b];
et deux memcpy
appels serait-il le faire si c'est vraiment la façon dont a
et b
sont déclarées.Oui. a et b sont déclarées comme ceci. Cependant, j'ai édité la question de contenir le cas lorsque b est ajouté pour une.
qui n'arrivera pas à moins que
a
est initialement dimensionnée pour accueillir ses données et de l'espace pour ajouté des données Et une memcpy
type d'opération est toujours impliqué tôt ou tard. Peu importe, la syntaxe que vous utilisez est certainement pas en accord avec le langage C.Oui. Je suis conscient que ce n'est certainement pas C. je l'ai écrit dans un pseudo style pour mieux expliquer mon problème.
OriginalL'auteur Ali Caglayan | 2015-02-21
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de
byte
type de C. Sauf si c'est une définition de type, vous pouvez utiliserunsigned char
ou certains type de<stdint.h>
de façon portable. De toute façon, voici une solution:Assurez-vous que la matrice de
a
a de la place pour au moinsn + m
éléments (icin = 3
etm = 3
) afin d'éviter les problèmes avec un tableau de débordement (c'est à dire un comportement indéfini, qui peut se bloquer votre programme ou pire).char a[3 + 3] a de la place pour la première
a
+ joints en annexeb
évidemment.Oh! Je pensais qu'il y avait une certaine taille qui me manquait. Bien sûr.
Donc, si nous devions parler d'un tableau
c
, en supposanta
etb
sont pleins, nous aurions besoin de prendrec
la "longueur" de a + b, puis copiez à l'aide dememcpy()
en cb
puisa
. Ce que je ne suis pas sûr de bien est laa+3
syntaxe que vous avez utilisé. Qu'est-ce que cela signifie?Oh, mon cognition seulement enregistré
a=a+b
cas. Afin dec=a+b
vous avez besoin de copiera
àc
, puisb
àc+n
. Lec+n
fonctionne de la même manière quea+3
. Lea
"désintègre" (ou plus officiellement converti) à l'adresse du premier élément du tableau. Par+
opérateur entier vous effectuez l'arithmétique des pointeurs. Lea+3
est équivalent à&a[3]
je crois donc que vous avez une idée maintenant.OriginalL'auteur Grzegorz Szpetkowski
Si les tailles sont connus, vous pouvez simplement créer un nouveau tableau d'octets de taille et d'utilisation simple des boucles de la remplir.
OriginalL'auteur OHHH