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-terminator;这是必需的,否则将无法知道命令字符串中有多少字节。

如果您碰巧知道命令的最大长度,那么您可以执行以下操作:

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

这同样可以让您通过查找0x0. 请注意,这会浪费空间,因为不是最大长度的每个命令都有额外的零字节。

此答案假定这0x0不是有效的命令字节。如果是,您需要分别存储每个命令的长度。

于 2013-09-02T22:10:15.193 回答
2

这应该有效:

const unsigned char test[][4] = {{0x22,0x33},{0x22,0x33,0x44},{0x22,0x33,0x44,0x55},{0x22,0x33,0x45}};
于 2013-09-02T22:02:11.767 回答