printf("3:%s\n", token1);
printf("3-1:%d\n", atoi(token1));
int data1_int = atoi(strtok(NULL, "-")); // 提取600
long long data1_long = atoll(strtok(NULL, "-")); // 提取1709651086202
printf("Data from str1: %d, %lld\n", data1_int, data1_long);
}
else
goto UV;
}
printf("8:%s\n", str2);
if (str2)
{
// 提取字符串中的数据
token1 = strtok(str2, "-");
printf("4:%s\n", token1); // UV
UV:
if (strstr(token1, "UV"))
{
token1 = strtok(NULL, "-");
printf("5:%s\n", token1);
printf("5-1:%d\n", atoi(token1));
token1 = strtok(NULL, "-");
printf("6:%s\n", token1);
printf("6-1:%d\n", atoi(token1));
int data2_int = atoi(strtok(NULL, "-")); // 提取500
long long data2_long = atoll(strtok(NULL, "-")); // 提取1709650954839
printf("Data from str2: %d, %lld\n", data2_int, data2_long);
}
else
goto FoodSwitch;
}
}
static void WeekGet(char *str, char *re) // scanf 有空格检测失败的,可以用gets(str);代替scanf(“%s”, str);
{
// char str[] = “35 15 * * 1,2,3,4,5,6,7”;
// char str[] = “33 15 * * *”;
char i = 0;
unsigned char Timer = 0;
char token1;
char str1 = strtok(str, " ");
printf(“7:%s\n”, str1); // 35 s
if (str1)
{
printf(“7-1:%d\n”, atoi(str1)); // 35 d
}
str1 = strtok(NULL, " ");
printf(“8:%s\n”, str1); // 15 s
if (str1)
{
printf(“8-1:%d\n”, atoi(str1)); // 15 d
str1 = strtok(NULL, " ");
printf(“8-1:%s\n”, str1); //
str1 = strtok(NULL, " ");
printf(“8-2:%s\n”, str1); //
}
do
{
token1 = strtok(NULL, “,”);
if (token1)
{
i++;
switch ((int)atoi(token1))
{
case 1:
Timer |= 0x02;
break;
case 2:
Timer |= 0x04;
break;
case 3:
Timer |= 0x08;
break;
case 4:
Timer |= 0x10;
break;
case 5:
Timer |= 0x20;
break;
case 6:
Timer |= 0x40;
break;
case 7:
Timer |= 0x80;
break;
default:
Timer |= 0x01;
}
char k = atoi(token1);
j:
i++;
if (i == k)
{
printf(“周%d 开\n”, k);
}
else if (i <= 7)
{
printf(“周%d 关\n”, i);
}
else if (Timer == 1)
{
printf(“执行一次 开\n”);
}
else
{
printf(“执行一次 关\n”);
}
}
else
goto j;
} while (token1 || i <= 7);
printf(“Timer=%d\n”, Timer);
re = Timer;
}
static void test1(char str) // scanf 有空格检测失败的,可以用gets(str);代替scanf(“%s”, str);
{
// char str = (char)malloc(200 * sizeof(int));
// scanf("%s", str);
// gets(str);
// 提取JSON数据
char *json_start = strchr(str, '{');
char *json_end = strrchr(str, '}');
if (json_start && json_end && json_end > json_start)
{
// if (json_start && json_end ) {
// 计算JSON数据长度
int json_len = json_end - json_start + 1;
bool json_outbool;
int json_outint = 0;
float json_outfloat = 0;
char *json_outstr;
// 创建缓冲区,并拷贝JSON数据
char *json_str = (char *)malloc(json_len + 1);
// char* json_str = (char*)malloc(400);
strncpy(json_str, json_start, json_len);
json_str[json_len] = '\0';
// 解析JSON数据
cJSON* json = cJSON_Parse(json_str);
// cJSON *json = cJSON_Parse(json_start);
printf("json :%s\n", json);
if (json)
{
// 解析params元素
cJSON *params = cJSON_GetObjectItem(json, DEF_params);
if (params)
{
cJSON *LocalTimer = cJSON_GetObjectItem(params, DEF_LocalTimer); // 本地定时
if (LocalTimer)
{
int i;
unsigned char get = 0;
for (i = 0; i < cJSON_GetArraySize(LocalTimer); i++)
{
cJSON *timer_object = cJSON_GetArrayItem(LocalTimer, i);
printf("LocalTimer %d:\n", i + 1);
printf("Timer: %s\n", cJSON_GetObjectItem(timer_object, DEF_Timer)->valuestring);
printf("Enable: %d\n", cJSON_GetObjectItem(timer_object, DEF_Enable)->valueint);
printf("FoodVol: %d\n", cJSON_GetObjectItem(timer_object, DEF_FoodVol)->valueint);
printf("TimezoneOffset: %d\n", cJSON_GetObjectItem(timer_object, DEF_TimezoneOffset)->valueint);
printf("IsValid: %d\n", cJSON_GetObjectItem(timer_object, DEF_IsValid)->valueint);
if (i == 0)
{
WeekGet(cJSON_GetObjectItem(timer_object, DEF_Timer)->valuestring, &get);
printf("get=%d\n", get);
}
}
}
if (cJSON_GetObjectItem(json, DEF_version))
{
json_outstr = cJSON_GetObjectItem(json, DEF_version)->valuestring;
printf("%s: %s\n", DEF_version, json_outstr);
}
}
else
{
printf("未找到params元素\n");
}
// 释放内存
free(json_str);
cJSON_Delete(json);
}
else
{
printf("解析JSON数据失败\n");
}
}
else
{
printf("未在字符串中找到JSON数据\n");
}
}
int main()
{
unsigned char get = 0;
// char str[] = “35 15 * * 1,2,3,5,6,7”;
// char str[] = “33 15 * * ";
// char str = (char )malloc(1000);
// scanf(“%s”, str);
// gets(str);
const char str = “+MQTTSUBRECV:0,”/sys/a15e2EhA/BP/thing/service/property/set”,263,{“method”:“thing.service.property.set”,“id”:“782857171”,“params”:{“LocalTimer”:[{“Timer”:“47 20 * * 1,2,3,4,5,6,7”,“Enable”:1,“FoodVol”:20,“TimezoneOffset”:28800,“IsValid”:1},{“Timer”:“”,“Enable”:0,“FoodVol”:0,“TimezoneOffset”:-1,“IsValid”:0}]},“version”:“1.0.0”}";
char str1[] = “FoodSwitch-1-0-600-1709651086202,UV-1-1-500-1709650954839”;
CountDown_Analysis(str1);
test1(str);
// WeekGet(str, &get);
// printf("get=%d", get);
// free(str);
return 0;
}
输出的结果
+MQTTSUBRECV:0,“/sys/a15e2EhA***/BP**/thing/service/property/set”,263,{“method”:“thing.service.property.set”,“id”:“782857171”,“params”:{“LocalTimer”:[{“Timer”:“47 20 * * 1,2,3,7”,“Enable”:1,“FoodVol”:20,“TimezoneOffset”:28800,“IsValid”:1},{“Timer”:“”,“Enable”:0,“FoodVol”:0,“TimezoneOffset”:-1,“IsValid”:0}]},“version”:“1.0.0”}
7:FoodSwitch-1-0-600-1709651086202
1:FoodSwitch
2:1
2-1:1
3:0
3-1:0
Data from str1: 600, 1709651086202
8:UV-1-1-500-1709650954839
4:UV
5:1
5-1:1
6:1
6-1:1
Data from str2: 500, 1709650954839
json :
LocalTimer 1:
Timer: 47 20 * * 1,2,3,7
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!
5zSCHUoF-1715841507507)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!