分享一下用结构体数组来制作一张静态表格
一般上我们开会研讨,很多人都会说,我这里有一张表格,通过查表…(省略一千字)
那么表格可以分为静态表格和动态表格,静态表格多半是存储一些固有属性,比如说,和服务器通讯时,大部分会选择json或者其他字符串格式类型的Body,而在字符串的判断上c语言不像c#一样支持switch case判断字符串的方法,这里我们可以选择用表格记录他的命令字符串类型,而返回一个你自己设定的十六进制类型(o,对了,动态表参考链表吧)
使用方法如下:
#define CMDTYPE1 1
#define CMDTYPE2 2
#define CMDTYPE3 3
#define CMD_TYPE_MAX 4
// Here we use "cmd" type for example
static const struct{
const char *cmd;
unsigned int select;
}cmd[]={
{"cmd1",CMDTYPE1},
{"cmd2",CMDTYPE2},
{"cmd3",CMDTYPE3},
{NULL,CMD_TYPE_MAX}
};
// Parse the string and return CMD Type
unsigned int VBS_Select_Parse(const char *str_cmd)
{
unsigned short i;
for(i = 0 ; cmd[i].cmd ; i++)
{
if(strcmp(str_cmd,cmd[i].cmd) == 0)
{
return cmd[i].select;
}
}
return BCMD_BAD;
}
// Then we can parse by this way
...
cmd = cJSON_GetObjectItem(root,"Cmd");
if(cmd != NULL)
{
switch(VBS_Select_Parse(cmd->valuestring))
{
case CMDTYPE1:
// add ur code here
break;
case CMDTYPE2:
// add ur code here
break;
default:
break;
}
}
...
上面是使用静态表格,把命令字符串和程序里判断的一个short绑定在一起了。当然这是一个比较基本的用法,可以拓展一下这张表格,我们可以做一张大表格,大表格里面包含了很多小表格,小表格也可以再包含一张表格。因为我是做网关的,网关下面有很多的子设备,我个人比较喜欢用表格来囊括所有子设备的固有属性。比如说
/* -----------------------------------------------------------------------------------------------------------------------
* Public Ability declaration
------------------------------------------------------------------------------------------------------------------------ */
/* < --------- define type > < ------------ instant > < ------------ device type > < ------------ description&