简体   繁体   中英

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

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 (ie undefined behavior, that may crash yor program or even worse).

如果已知大小,您可以简单地创建一个具有该大小的新字节数组,并使用简单的循环来填充它。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM