CJSON_DIRECT_H_
发布时间:2020-12-16 19:18:04 所属栏目:百科 来源:网络整理
导读:#ifndef _CJSON_DIRECT_H_#define _CJSON_DIRECT_H_typedef enum {KEY_TYPE_NULL,KEY_TYPE_U8,KEY_TYPE_U16,KEY_TYPE_U32,KEY_TYPE_FLOAT,KEY_TYPE_DOUBLE,KEY_TYPE_STRING,KEY_TYPE_OBJECT,KEY_TYPE_ARRAY,/// 注意,对于基本数组,只支持32位KEY_TYPE_MAX}
#ifndef _CJSON_DIRECT_H_ #define _CJSON_DIRECT_H_ typedef enum { KEY_TYPE_NULL,KEY_TYPE_U8,KEY_TYPE_U16,KEY_TYPE_U32,KEY_TYPE_FLOAT,KEY_TYPE_DOUBLE,KEY_TYPE_STRING,KEY_TYPE_OBJECT,KEY_TYPE_ARRAY,///< 注意,对于基本数组,只支持32位 KEY_TYPE_MAX }key_type_e; typedef struct key_info_s{ int csize; ///< 本结构体大小 key_type_e type; ///< 成员类型 char *key; ///< 成员名称 int offset; ///< 成员偏移地址 int ksize; ///< 成员大小 struct key_info_s *sub_key; ///< 对于#KEY_TYPE_OBJECT类型,其具体类型定义 int arraycnt; ///< 对于#KEY_TYPE_ARRAY类型,其个数 key_type_e arraytype; ///< 对于#KEY_TYPE_ARRAY类型,其成员的类型 }key_info_t; /*成员在结构体中的偏移地址*/ #define NAME_OFFSET(type,name) ((int)(&(((type *)0)->name))) #define NAME_SIZE(type,name) (sizeof((((type *)0)->name))) /** *@brief 形成结构体 *@param ctype 结构体类型 *@param ktype 成员类型 *@param kname 成员名 *@param subkey 如果keytype为#KEY_TYPE_OBJECT,则为其对应结构体的#key_info_t 指针 *@param arraycnt 对于#KEY_TYPE_ARRAY类型,其个数 *@param arraytype 对于#KEY_TYPE_ARRAY类型,其成员的类型 * */ #define MAKE_ARRAY_INFO(ctype,ktype,kname,subkey,arraycnt,arraytype) {sizeof(ctype),#kname,NAME_OFFSET(ctype,kname),NAME_SIZE(ctype,arraytype} #define MAKE_KEY_INFO(ctype,subkey) MAKE_ARRAY_INFO(ctype,KEY_TYPE_NULL) #define MAKE_END_INFO() {0,KEY_TYPE_NULL,NULL,NULL} /** *@brief *@param kinfo 输入 结构体信息,用于识别结构体各成员 *@param string 输入 要转化的字符串 *@param obj 输出 结构体指针。如果为NULL,会自动分配内存,需要释放 * *@return obj。失败时返回NULL * */ void *cjson_string2object(key_info_t *kinfo,char *string,void *obj); /** *@brief *@param kinfo 输入 结构体信息,用于识别结构体各成员 *@param obj 输入 要转化的结构体地址 * *@return json格式的字符串。NULL if failed * *@note 其返回的字符串,需要用free释放 * */ char *cjson_object2string(key_info_t *kinfo,void *obj); #endif (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |