如何在 C 中连接两个字节数组?

How to concatenate two byte arrays in C?

我在 Arduino 平台上编写代码,我正在尝试编写一些可以在 C 中 concatenate/append 字节数组的东西。

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

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

获得上述结果的最佳方法是什么?

我试过在线搜索,但运气不佳。我在 SO 上看到了另一个答案,强调了执行此操作所需的步骤,但我无法遵循它们。他们还说有些库可以处理这种事情,但是因为我在使用 Arduino,所以我不确定这些是否对我来说完全可用。

我知道需要某种内存操作才能使其正常工作,但是我对这些低级操作很陌生,所以它们对我来说意义不大。我有高级语言(C#、Java 和一些 C++)的经验。


我还应该补充:同样的技术可以用于:

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

a = a + b

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

C 中没有 byte 类型。除非是某种类型定义,否则您可以使用 unsigned char<stdint.h> 中的某些固定类型。无论如何,这是一些解决方案:

#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;
}

确保数组 a 至少有 n + m 个元素的空间(此处 n = 3m = 3 也是如此)以避免数组溢出问题(即未定义的行为,可能会使您的程序崩溃甚至更糟。