1

C ++には2つの配列があり、次のように一方をもう一方の末尾に追加したいと思います。

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

これら2つを追加すると、{0x00、0x01}が生成されます。どうすればいいですか?System.arraycopy()を使用するJavaでは十分に単純ですが、マイクロコントローラー用にコーディングしているため、C ++/Cでこれを実現するのにどのライブラリが役立つかわかりません。

4

3 に答える 3

6

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は、現在のサイズの倍数に基づいて大きくなるため、大量のメモリを浪費する可能性があります。その中にあるほど、無駄になる可能性があります。そうは言っても、それは素晴らしいクラスであり、メモリをどのように処理するかを知っている限り、それは素晴らしいオプションです。

于 2012-07-17T17:03:01.057 に答える
1

あなたがそこに書いたようにあなたはそれを書くことはできません、Cはあなたがそれらを初期化したデータのサイズ、すなわち1バイトに合うようにそれらの配列に固定メモリを割り当てます

使用するデータの量がわかっている場合はchar byte[10];、10個の要素でより大きな配列を初期化できますが、Cでの作成時に自動的に入力することはできません。実行時までに必要なデータの量がわからない場合は、 new(またはmallocまたはc)で割り当てます。

Javaのような動作が必要な場合は、マイクロコントローラーのサポートが

于 2012-07-17T17:00:44.257 に答える
1

Arduino環境のクラスを使用してみてくださいstring。これは、avr-g++コンパイラーを使用してAVRで使用することを目的としています。ただし、null(0)バイトをサポートしているかどうかはわかりません。

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

于 2012-07-17T17:05:47.640 に答える