追加到在C字节数组++

问题描述:

我在C两个阵列++和我想追加一个的端部的其他使得:追加到在C字节数组++

char byte1[] = {0x00}; 
char byte2[] = {0x01}; 

追加这两种应该产生{0×00 0×01} 。我将如何做到这一点?在Java中使用System.arraycopy()足够简单,但我不确定什么库会帮助我在C++/C中完成此任务,因为我正在编写一个微控制器。

+0

易于使用'的std :: VECTOR'。像'result = byte1 + byte2'。 – chris 2012-07-17 16:59:10

+0

std :: vector在AVR上可能无法很好地工作。 – 2012-07-17 17:04:47

+0

是的,这是唯一的问题。尽管如此,这很容易。 – chris 2012-07-17 17:06:54

如果你使用C,你可以这样做:

//Whatever sizes your stating arrays are. 
const int S_ARR1 = 3; 
const int S_ARR2 = 2; 

//Create buffer that can hold both. 
char combined[S_ARR1 + S_arr2]; 

//Copy arrays in individually. 
memcpy(combined, byte1, S_ARR1); 
memcpy(combined + S_ARR1, byte2, S_ARR2); 

如果你想C++,唐首先不要使用字节数组。使用std :: vector作为一个数组,可以跟踪它自己的元素数量,因此你可以感觉更像你在java世界:)

虽然关于C++矢量内存嵌入式的一点警告:

你在一个微控制器,std :: vector可以浪费很多内存,因为它会根据当前大小的倍数增长。它越多,你就会越浪费。话虽如此,这是一个伟大的课程,只要你知道它如何处理它的记忆是一个很好的选择。

+0

关于C++部分,为什么不对'std :: vector'使用'reserve()'/'resize()'来最小化重新分配? – 2012-07-17 17:07:00

+0

这绝对是一种选择。你甚至可以使用myVector.Swap(new std :: vector (myVector));诀窍,如果你知道你在做什么:)但是C也可以很好,不管。 – 2012-07-17 17:08:36

+0

或者,您可以使用'std :: array'来避免'memcpy',或者编写自己的'std :: conservative_vector'来避免手动管理内存。 – 2012-07-17 17:11:06

你不能因为你写它那里,C分配这些阵列如果你知道你有多少数据要适合你用1个字节

初始化其中的数据的大小固定的内存使用你可以用char byte[10];为10个元素初始化一个更大的数组,但是你不能在C中创建时自动填充它。如果你不知道需要多少数据直到运行时,那么你需要为它分配new(或者malloc或c)。

如果你想样的行为看的std ::向量Java中,如果您的微控制器的支持是

尝试使用Arduino环境中的string类,该类意图在AVR上与avr-g ++编译器一起使用。但我不确定它是否支持空(0)字节。

http://arduino.cc/en/Reference/StringObject http://github.com/arduino/Arduino/blob/master/hardware/arduino/cores/arduino/WString.cpp