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

时间:2015-02-21 22:08:44

标签: c arrays arduino concatenation

我在Arduino平台上进行编码,我正在尝试编写将在C中连接/附加字节数组的内容。

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

2 个答案:

答案 0 :(得分:7)

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),以避免数组溢出问题(即未定义)行为,可能会导致程序崩溃甚至更糟。)

答案 1 :(得分:0)

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