Ali Caglayan
Ali Caglayan

Reputation: 288

How to concatenate two byte arrays in C?

I am coding on the Arduino platform and I am trying to write something that will concatenate/append byte arrays in C.

byte a[] = {a1, ..., an};
byte b[] = {b1, ..., bm};

byte c[] = a + b; // equivalent to {a1, ..., an, b1, ..., bm}

What is the best way to get the above result?

I tried searching online, however I have not had much luck. I saw another answer on SO highlighting the steps needed in order to do this however I could not follow them. They also say that there are libraries that deal with this kind of thing, however as I am on Arduino I am unsure whether or not these are totally available to me.

I understand there needs to be some sort of memory manipulation in order for this to work however I am new to these kinds of low level manipulations so they do not make too much sense to me. I have experience in higher languages (C#, Java and some C++).


I should also add: Can the same technique work for:

byte a[] = {a1, ..., an};
byte b[] = {b1, ..., bm};

a = a + b

Upvotes: 12

Views: 21112

Answers (2)

Grzegorz Szpetkowski
Grzegorz Szpetkowski

Reputation: 37934

There is no byte type in C. Unless it's some type definition, you could use unsigned char or some fixed type from <stdint.h> portably. Anyway, here is some solution:

#include <stdio.h>
#include <string.h>

int main(void) {
    unsigned char a[3+3] = {1, 2, 3}; // n+m
    unsigned char b[3]   = {4, 5, 6}; // m

    memcpy(a+3, b, 3); // a+n is destination, b is source and third argument is m

    for (int i = 0; i < 6; i++) {
        printf("%d\n", a[i]);
    }

    return 0;
}

Make sure that array a has room for at least n + m elements (here n = 3 and m = 3 as well) in order to avoid issues with array overflow (i.e. undefined behavior, that may crash yor program or even worse).

Upvotes: 13

OHHH
OHHH

Reputation: 1051

If the sizes are known you can simply create a new byte array of that size and use simple loops to fill it.

Upvotes: 0

Related Questions