0

プレーンCでこのようなことを宣言しようとしています

const unsigned char test[][][][] = {{0x22,0x33},{0x22,0x33,0x44},{0x22,0x33,0x44,0x55},{0x22,0x33,0x45}};

しかし、有効ではありません。インデックスでアドレス指定できる 4 つの配列を格納するエレガントな方法を探していますが、デバイスへの RS232 コマンドが含まれているため、サイズが異なります。

コマンド[INITIALISE]、コマンド[RESET]などを探しています。

提案をお寄せいただきありがとうございます。

4

2 に答える 2

6

一般に、単一の変数宣言でこれを行うことはできません。私が提案するのは、次のようなものです。

const unsigned char command1[] = {0x2, 0x3, 0x0};
const unsigned char command2[] = {0x3, 0x0};
const unsigned char *commands[] = {command1, command2};

各コマンドには0x0- ターミネータがあることに注意してください。そうしないと、コマンド文字列に含まれるバイト数を知る方法がないため、これが必要です。

コマンドの最大長がわかっている場合は、次のことができます。

const unsigned char commands[][MAX_LENGTH+1] = {
   {0x2, 0x3},
   {0x3},
};

同様に、 を探すことでコマンドの長さを知ることができます0x0。最大長ではない各コマンドに余分なゼロバイトがあるため、これはスペースを浪費することに注意してください。

0x0この回答は、それが有効なコマンド バイトではないことを前提としています。そうである場合は、各コマンドの長さを個別に保存する必要があります。

于 2013-09-02T22:10:15.193 に答える