72 lines
2.0 KiB
C
72 lines
2.0 KiB
C
#include "json_parser.h"
|
||
#include "chinese_char_map.h"
|
||
#include <stdio.h>
|
||
#include <string.h>
|
||
#include <stdlib.h>
|
||
|
||
// 简单的JSON解析函数,解析格式: {"cmd":1,"text":"hello"}
|
||
int ParseJsonCommand(const char* json_str, JsonCommand* command) {
|
||
if (!json_str || !command) {
|
||
return -1;
|
||
}
|
||
|
||
// 初始化结构体
|
||
command->cmd = 0;
|
||
memset(command->text, 0, MAX_TEXT_LENGTH);
|
||
|
||
// 查找cmd字段
|
||
const char* cmd_pos = strstr(json_str, "\"cmd\":");
|
||
if (cmd_pos) {
|
||
cmd_pos += 6; // 跳过"cmd":
|
||
// 跳过空格
|
||
while (*cmd_pos == ' ') cmd_pos++;
|
||
command->cmd = atoi(cmd_pos);
|
||
}
|
||
|
||
// 查找text字段
|
||
const char* text_pos = strstr(json_str, "\"text\":");
|
||
if (text_pos) {
|
||
text_pos += 7; // 跳过"text":
|
||
// 跳过空格和引号
|
||
while (*text_pos == ' ' || *text_pos == '\"') text_pos++;
|
||
|
||
// 复制文本直到遇到引号或字符串结束
|
||
int i = 0;
|
||
while (*text_pos && *text_pos != '\"' && i < MAX_TEXT_LENGTH - 1) {
|
||
command->text[i++] = *text_pos++;
|
||
}
|
||
command->text[i] = '\0';
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
// 创建IP地址消息,格式: {"type":"ip","address":"192.168.1.100"}
|
||
int CreateIpMessage(char* buffer, int buffer_size, const char* ip_address) {
|
||
if (!buffer || !ip_address || buffer_size < 50) {
|
||
return -1;
|
||
}
|
||
|
||
int len = snprintf(buffer, buffer_size,
|
||
"{\"type\":\"ip\",\"address\": \"%s\"}",
|
||
ip_address);
|
||
|
||
return (len > 0 && len < buffer_size) ? 0 : -1;
|
||
}
|
||
|
||
// 查找中文字符在fonts3数组中的索引
|
||
int FindChineseCharIndex(const char* utf8_char) {
|
||
if (!utf8_char) {
|
||
return -1;
|
||
}
|
||
|
||
// 遍历映射表查找匹配的字符
|
||
for (int i = 0; i < CHINESE_CHAR_MAP_SIZE; i++) {
|
||
if (strcmp(utf8_char, chinese_char_map[i].utf8_char) == 0) {
|
||
return chinese_char_map[i].font_index;
|
||
}
|
||
}
|
||
|
||
// 未找到匹配的字符
|
||
return -1;
|
||
} |