我试图在平面C中声明这样的东西
const unsigned char test[][][][] = {{0x22,0x33},{0x22,0x33,0x44},{0x22,0x33,0x44,0x55},{0x22,0x33,0x45}};
但无效。我寻求一种优雅的方式来存储4个可以通过索引寻址的数组,但它们的大小不相同,因为它包含了一些设备的RS232命令。
我正在寻找命令[INITIALISE],命令[RESET]等等。
非常感谢您的建议。
答案 0 :(得分: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
不是有效的命令字节。如果是,则需要单独存储每个命令的长度。
答案 1 :(得分:2)
这应该有效:
const unsigned char test[][4] = {{0x22,0x33},{0x22,0x33,0x44},{0x22,0x33,0x44,0x55},{0x22,0x33,0x45}};