我在 C++ 中有两个数组,我想将一个附加到另一个的末尾,这样:
char byte1[] = {0x00};
char byte2[] = {0x01};
附加这两个应该产生 {0x00, 0x01}。我该怎么做?在 Java 中使用 System.arraycopy() 很简单,但我不确定哪个库可以帮助我在 C++/C 中完成此任务,因为我正在为微控制器编写代码。
如果你使用 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 会浪费大量内存,因为它会根据当前大小的倍数增长。里面的东西越多,你浪费的就越多。话虽如此,这是一门很棒的课程,只要您知道它如何处理内存,它就是一个不错的选择。
尝试使用string
Arduino 环境中的类,该类旨在通过 avr-g++ 编译器在 AVR 上使用。不过,我不确定它是否支持空(0)字节。
http://arduino.cc/en/Reference/StringObject http://github.com/arduino/Arduino/blob/master/hardware/arduino/cores/arduino/WString.cpp
你不能像你在那里写的那样,C 为这些数组分配固定内存以适应你用 1 字节初始化它们的数据的大小
如果您知道要使用多少数据,您可以用char byte[10];
10 个元素初始化一个更大的数组,但是您不能在 C 中创建时自动填充它。如果您不知道在运行时之前需要多少数据,那么您需要用 new(或 malloc 或 c)分配它。
如果您想要类似 java 的行为,请查看 std::vector,如果您的微控制器支持是