Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中连接两个字节数组?_C_Arrays_Arduino_Concatenation - Fatal编程技术网

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

如何在C中连接两个字节数组?,c,arrays,arduino,concatenation,C,Arrays,Arduino,Concatenation,我在Arduino平台上编写代码,并试图编写一些东西,用C连接/附加字节数组 字节a[]={a1,…,an}; 字节b[]={b1,…,bm}; 字节c[]=a+b;//等价于{a1,…,an,b1,…,bm} 获得上述结果的最佳方法是什么 我试着在网上搜索,但是运气不太好。我看到了另一个答案,因此强调了这样做所需的步骤,但我无法遵循它们。他们还说,有一些图书馆可以处理这类事情,但由于我在Arduino上,我不确定这些图书馆是否对我完全可用 我知道需要某种内存操作才能工作,但是我对这种低级操作

我在Arduino平台上编写代码,并试图编写一些东西,用C连接/附加字节数组

字节a[]={a1,…,an};
字节b[]={b1,…,bm};
字节c[]=a+b;//等价于{a1,…,an,b1,…,bm}
获得上述结果的最佳方法是什么

我试着在网上搜索,但是运气不太好。我看到了另一个答案,因此强调了这样做所需的步骤,但我无法遵循它们。他们还说,有一些图书馆可以处理这类事情,但由于我在Arduino上,我不确定这些图书馆是否对我完全可用

我知道需要某种内存操作才能工作,但是我对这种低级操作还不熟悉,所以它们对我来说没有太多意义。我在高级语言(C#、Java和一些C++)方面有经验


我还要补充一点:同样的技术是否可以用于:

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

a = a + b

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

C中没有
byte
类型。除非是某种类型定义,否则您可以使用
无符号字符
中的某种固定类型。无论如何,这里有一些解决方案:

#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[3+3]={1,2,3};//n+m
无符号字符b[3]={4,5,6};//m
memcpy(a+3,b,3);//a+n是目的地,b是源,第三个参数是m
对于(int i=0;i<6;i++){
printf(“%d\n”,a[i]);
}
返回0;
}

确保数组
a
有空间容纳至少
n+m
元素(这里
n=3
m=3
),以避免数组溢出问题(即未定义的行为,可能会使程序崩溃或更糟)。

大小是否固定?假设
byte
是大小相等的
char
字节c[sizeof(a)+sizeof(b]如果
a
b
确实是这样声明的,那么两个调用就可以了。@WhozCraig是的。a和b是这样声明的。但是,我已经编辑了这个问题,以包含b被附加到a的情况。@alister除非
a
最初调整大小以适应其数据和属性,否则不会发生这种情况附加数据的空间和
memcpy
-类型的操作迟早还是会涉及的。不管怎样,您使用的语法肯定与C语言不一致。@WhozCraig是的。我知道它肯定不是C。我已经用伪样式编写了它,以更好地解释我的问题。不,不需要涉及循环。如何处理你确定a有足够的空间吗?@alister
无符号字符a[3+3]
显然有空间放置首字母
a
+附加的
b
。@iharob哦!我觉得我缺少了一些大小。当然。因此,如果我们要讨论数组
c
,假设
a
b
已满,我们需要将
c
设置为a+b的“长度”,然后使用
memc进行复制py()
转换成c
b
然后
a
。我不确定的是你使用的
a+3
语法。那是什么意思?@alister:哦,我的认知只注册了
a=a+b
的情况。按照
c=a+b
的顺序,你需要将
a
复制到
c
,然后
b
复制到
c+n
的工作方式与
a+3
相同。
a
会“衰减”(或更正式地转换)到数组中第一个元素的地址。通过
+
运算符和整数,您正在执行指针算术。
a+3
相当于
&a[3]
,所以我相信您现在已经有了主意。