在C ++中附加到字节数组

时间:2012-07-17 16:56:02

标签: c++ avr

我在C ++中有两个数组,我想将一个数组追加到另一个数组的末尾,这样:

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

追加这两个应该产生{0x00,0x01}。我该怎么做?使用System.arraycopy()在Java中很简单,但是我不确定哪个库可以帮助我在C ++ / C中完成这个,因为我正在编写一个微控制器。

3 个答案:

答案 0 :(得分:4)

如果你正在使用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可以在基于当前大小的倍数增长时浪费大量内存。它越多,你就越浪费。话虽如此,它是一个很棒的课程,只要你知道它如何处理它的记忆就是一个很好的选择。

答案 1 :(得分:0)

你不能像在那里写的那样,C为这些数组分配固定内存以适应你初始化它们的数据的大小,即1字节

如果您知道要使用多少数据,可以使用char byte[10];初始化一个包含10个元素的更大数组,但是在C中创建时无法自动填充它。如果你不知道怎么做在运行时需要的数据然后你需要用new(或malloc或c)分配它。

如果您想要类似java的行为,请查看std :: vector,如果您的微控制器支持是

答案 2 :(得分:0)

尝试使用Arduino环境中的string类,该类用于AVR和avr-g ++编译器。我不确定它是否支持null(0)字节。

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