MD5 AND JSON AND XML
MD5JSON.h
- #pragma once
- #include "include/json/json.h"
- #include "include/md5/md5.h"
- #include "xml/tinyxml/tinystr.h"
- #include "xml/tinyxml/tinyxml.h"
- #include <string>
- using namespace std;
- #pragma comment(lib,"md5_JSON\\include\\bin\\json_vc71_libmtd.lib")
- #define MJ MD5JSON::getInstance()
- #define JSON Json
- #define XM XML::getInstance()
- // //多线程调试 (/MTd)
- class MD5JSON
- {
- //md5
- md5_state_t m_context;
- unsigned char m_Digest[];
- char m_outstr[];
- //json
- char *buf;
- Json::Reader reader;
- Json::Value root;
- string m_jsonfilename;
- Json::Value jsonItem;
- public:
- ///////////////////////// MD5
- static MD5JSON *getInstance();
- bool setmd5(const char *data);
- bool setmd5(const char *data, char *buffer, int bufferLen);
- bool setmd5(const char *data, int datalen);
- bool setmd5(string data);
- bool setmd5(string data, char *buffer, int bufferLen);
- void print();
- void print(char *data);
- void print(string data);
- void print(const char *data);
- char *getmd5() { return m_outstr; }
- public:
- ///////////////////////// JSON
- bool createJSONFile(const char *filename);
- bool createJSONFile(string filename);
- string getFileName() { return m_jsonfilename; }
- Json::Value getRoot() { return this->root; }
- Json::Value getItem() { return this->jsonItem; }
- bool readJSONFile(const char *filename);
- bool readJSONFile(string filename);
- //直接写入文件
- bool insertData(const char *data);
- //json 方法写入并baocun
- bool insertData();
- //如果相同则覆盖
- //==================================================
- bool addChild(const char *key,const char *value);
- //MD5JSON::insertData(); 内部已经调用
- void addChildEnd();
- //==================================================
- char *getJSONData() { return buf; }
- //在加载文件时此函数就已经调用
- bool parseJSON();
- //这里只有在一个root下才有效
- int get_int(const char *key);
- string get_string(const char *key);
- unsigned int get_uint(const char *key);
- double get_double(const char *key);
- bool get_bool(const char *key);
- const char *get_const_string(const char *key);
- //清楚整个文件数据
- void clear();
- //遍历
- void ergodicObject(Json::Value::Members &object);
- void ergodicObject(Json::Value &root, Json::Value::Members &object);
- //数组遍历
- void ergodicArray(Json::Value &root);
- private:
- //f30992da54715e5a0c4a7eaf29889641 //vico
- MD5JSON()
- {
- this->m_context = { };
- memset(this->m_Digest, , sizeof(this->m_Digest));
- memset(this->m_outstr, , sizeof(this->m_outstr));
- }
- ~MD5JSON()
- {
- if (buf)
- {
- delete[] buf;
- buf = NULL;
- }
- }
- };
- class XML
- {
- string name;
- TiXmlDocument* Doc;
- public:
- static XML *getInstance();
- string setXMLName(string name);
- bool createXML();
- bool createXML(string name);
- bool loadXML(string name);
- //Accout Password
- bool insert(string A, string P);
- bool save();
- bool saveToNewFile(string name);
- //node 除非你知道在做什么
- bool addChild(string node, string key, string value);
- //Accout AccoutValue Password PasswordValue
- bool addChild(string A, string AV,string P,string PV);
- private:
- XML();
- ~XML();
- };
MD5JSON.cpp
- #include "MD5JSON.h"
- ///////////////////////// MD5
- MD5JSON *MD5JSON::getInstance()
- {
- static MD5JSON md5json;
- return &md5json;
- }
- bool MD5JSON::setmd5(const char *data)
- {
- if (data)
- {
- md5_byte_t byteData[] = { };
- memset(byteData, , sizeof(byteData));
- int len = ;
- while (data[len])
- {
- byteData[len] = data[len];
- len++;
- }
- /*
- pms->abcd[1] = /*0xefcdab89 // T_MASK ^ 0x10325476;
- pms->abcd[2] = /*0x98badcfe // T_MASK ^ 0x67452301;
- */
- md5_init(&m_context);
- md5_append(&m_context, byteData, len);
- md5_finish(&m_context, m_Digest);
- sprintf_s(m_outstr,
- "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
- m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
- m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
- m_Digest[], m_Digest[], m_Digest[], m_Digest[]);
- return true;
- }
- return false;
- }
- bool MD5JSON::setmd5(const char *data, char *buffer, int bufferLen)
- {
- if (data && buffer && bufferLen)
- {
- md5_byte_t byteData[] = { };
- memset(byteData, , sizeof(byteData));
- int len = ;
- while (data[len])
- {
- byteData[len] = data[len];
- len++;
- }
- /*
- pms->abcd[1] = /*0xefcdab89 // T_MASK ^ 0x10325476;
- pms->abcd[2] = /*0x98badcfe // T_MASK ^ 0x67452301;
- */
- md5_init(&m_context);
- md5_append(&m_context, byteData, len);
- md5_finish(&m_context, m_Digest);
- sprintf_s(m_outstr,
- "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
- m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
- m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
- m_Digest[], m_Digest[], m_Digest[], m_Digest[]);
- strcpy_s(buffer, bufferLen, m_outstr);
- return true;
- }
- return false;
- }
- bool MD5JSON::setmd5(const char *data, int datalen)
- {
- if (data && datalen)
- {
- md5_byte_t byteData[] = { };
- memset(byteData, , sizeof(byteData));
- while (data[datalen - ])
- {
- byteData[datalen - ] = data[datalen - ];
- datalen--;
- }
- /*
- pms->abcd[1] = /*0xefcdab89 // T_MASK ^ 0x10325476;
- pms->abcd[2] = /*0x98badcfe // T_MASK ^ 0x67452301;
- */
- md5_init(&m_context);
- md5_append(&m_context, byteData, datalen - );
- md5_finish(&m_context, m_Digest);
- sprintf_s(m_outstr,
- "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
- m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
- m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
- m_Digest[], m_Digest[], m_Digest[], m_Digest[]);
- return true;
- }
- return false;
- }
- bool MD5JSON::setmd5(string data)
- {
- return MD5JSON::setmd5(data.c_str());
- }
- bool MD5JSON::setmd5(string data, char *buffer, int bufferLen)
- {
- return MD5JSON::setmd5(data.c_str(),buffer,bufferLen);
- }
- void MD5JSON::print()
- {
- printf("%s\n", m_outstr);
- }
- void MD5JSON::print(char *data)
- {
- printf("%s\n", data);
- }
- void MD5JSON::print(string data)
- {
- printf("%s\n", data.c_str());
- }
- void MD5JSON::print(const char *data)
- {
- printf("%s\n", data);
- }
- ///////////////////////// JSON
- bool MD5JSON::createJSONFile(const char *filename)
- {
- m_jsonfilename = filename;
- FILE *File = NULL;
- fopen_s(&File, filename, "wb");
- if (File)
- {
- fclose(File);
- File = NULL;
- return true;
- }
- return false;
- }
- bool MD5JSON::createJSONFile(string filename)
- {
- return MD5JSON::createJSONFile(filename.c_str());
- }
- bool MD5JSON::readJSONFile(const char *filename)
- {
- m_jsonfilename = filename;
- FILE *File = NULL;
- fopen_s(&File, filename, "rb");
- if (File)
- {
- rewind(File);
- //从0开始偏移到最后
- fseek(File, , SEEK_END);
- int size = ftell(File);
- //rewind(File);
- //从0开始偏移到0的位置
- fseek(File, , SEEK_SET);
- //文件当前读写位置
- //fseek(File, 0, SEEK_CUR);
- buf = new char[size + ];
- int read = fread_s(buf, size + , size, , File);
- rewind(File);
- fclose(File);
- File = NULL;
- return MD5JSON::parseJSON();
- }
- return false;
- }
- bool MD5JSON::readJSONFile(string filename)
- {
- return MD5JSON::readJSONFile(filename.c_str());
- }
- bool MD5JSON::insertData(const char *data)
- {
- FILE *File = NULL;
- fopen_s(&File, this->m_jsonfilename.c_str(), "wb+");
- if (File)
- {
- int len = strlen(data);
- fwrite(data, len, , File);
- fclose(File);
- File = NULL;
- return true;
- }
- return false;
- }
- bool MD5JSON::insertData()
- {
- return MJ->insertData(this->root.toStyledString().c_str());
- }
- bool MD5JSON::addChild(const char *key, const char *value)
- {
- if (key && value)
- {
- jsonItem[key] = value;
- return true;
- }
- return false;
- }
- void MD5JSON::addChildEnd()
- {
- this->root.append(jsonItem);
- MD5JSON::insertData();
- }
- bool MD5JSON::parseJSON()
- {
- if (this->reader.parse(MJ->getJSONData(), this->root))
- {
- Json::Value::Members member = this->root.getMemberNames();
- MD5JSON::ergodicObject(this->root,member);
- //int size_i = member.size();
- //for (int i = 0; i < size_i; i++)
- //{
- // if (this->root[member[i].c_str()].isObject())
- // {
- // Json::Value::Members temp = this->root[member[i].c_str()].getMemberNames();
- // MD5JSON::ergodicObject(this->root[member[i].c_str()],temp);
- // int size_j = temp.size();
- // for (int j = 0; j < size_j; j++)
- // {
- // if ((this->root[member[i].c_str()])[temp[j].c_str()].isObject())
- // {
- // Json::Value::Members tmp = (this->root[member[i].c_str()])[temp[j].c_str()].getMemberNames();
- // MD5JSON::ergodicObject(this->root[member[i].c_str()][temp[j].c_str()],tmp);
- // int size_k = tmp.size();
- // for (int k = 0; k < size_k; k++)
- // {
- // if ((this->root[member[i].c_str()])[temp[j].c_str()][tmp[k].c_str()].isObject())
- // {
- // Json::Value::Members tm = ((this->root[member[i].c_str()])[temp[j].c_str()])[tmp[k].c_str()].getMemberNames();
- // MD5JSON::ergodicObject(this->root[member[i].c_str()][temp[j].c_str()][tmp[k].c_str()], tm);
- // int size_n = tm.size();
- // for (int n = 0; n < size_n; n++)
- // {
- // if ((this->root[member[i].c_str()])[temp[j].c_str()][tmp[k].c_str()][tm[n].c_str()].isObject())
- // {
- // Json::Value::Members t = (((this->root[member[i].c_str()])[temp[j].c_str()])[tmp[k].c_str()])[tm[n].c_str()].getMemberNames();
- // MD5JSON::ergodicObject(this->root[member[i].c_str()][temp[j].c_str()][tmp[k].c_str()][tm[n].c_str()], t);
- // }
- // }
- // }
- // }
- // }
- // }
- // }
- //}
- return true;
- }
- return false;
- }
- void MD5JSON::ergodicObject(Json::Value::Members &object)
- {
- int size = object.size();
- for (int i = ; i < size; i++)
- {
- std::cout << object[i] << std::endl;
- }
- }
- void MD5JSON::ergodicObject(Json::Value &root, Json::Value::Members &object)
- {
- int size = object.size();
- for (int i = ; i < size; i++)
- {
- if (root[object[i].c_str()].isArray())
- {
- std::cout << "Key = " << object[i] << " , Value = Array"<< std::endl;
- MD5JSON::ergodicArray(root[object[i].c_str()]);
- }
- else if (root[object[i].c_str()].isBool())
- {
- std::cout << "Key = " << object[i] << " , Value = " << root[object[i].c_str()].asBool() << std::endl;
- }
- else if (root[object[i].c_str()].isDouble())
- {
- std::cout << "Key = " << object[i] << " , Value = " << root[object[i].c_str()].asDouble() << std::endl;
- }
- else if (root[object[i].c_str()].isInt())
- {
- std::cout << "Key = " << object[i] << " , Value = " << root[object[i].c_str()].asInt() << std::endl;
- }
- else if (root[object[i].c_str()].isString())
- {
- std::cout << "Key = " << object[i] << " , Value = ";
- printf("%s\n", root[object[i].c_str()].asString().c_str());
- }
- else if (root[object[i].c_str()].isObject())
- {
- std::cout << "Key = " << object[i] << " , Value = Object"<< std::endl;
- Json::Value::Members tmp = root[object[i].c_str()].getMemberNames();
- MD5JSON::ergodicObject(root[object[i].c_str()], tmp);
- }
- }
- }
- void MD5JSON::ergodicArray(Json::Value &root)
- {
- int size = root.size();
- for (int i = ; i < size; i++)
- {
- string str = root[i].toStyledString();
- //printf("%s\n", str.c_str());
- Json::Value::Members tmp = root[i].getMemberNames();
- MD5JSON::ergodicObject(root[i], tmp);
- }
- }
- int MD5JSON::get_int(const char *key)
- {
- if (root[key].isInt())
- return root[key].asInt();
- return ;
- }
- string MD5JSON::get_string(const char *key)
- {
- if (root[key].isString())
- return root[key].asString();
- string str;
- return str;
- }
- unsigned int MD5JSON::get_uint(const char *key)
- {
- if (root[key].isUInt())
- return root[key].asUInt();
- return -;
- }
- double MD5JSON::get_double(const char *key)
- {
- if (root[key].isDouble())
- return root[key].asDouble();
- return -1.0;
- }
- bool MD5JSON::get_bool(const char *key)
- {
- if (root[key].isBool())
- return root[key].asBool();
- return false;
- }
- const char *MD5JSON::get_const_string(const char *key)
- {
- if (root[key].isString())
- return root[key].asCString();
- return NULL;
- }
- void MD5JSON::clear()
- {
- FILE *File = NULL;
- fopen_s(&File, this->m_jsonfilename.c_str(), "rb");
- if (File)
- {
- string head("del ");
- head += this->m_jsonfilename;
- int c = system(head.c_str());
- if (!c)
- {
- MJ->createJSONFile(this->m_jsonfilename.c_str());
- delete[] buf;
- buf = NULL;
- return;
- }
- }
- MJ->createJSONFile(this->m_jsonfilename.c_str());
- delete[] buf;
- buf = NULL;
- }
- ///////////////////////////////////////////////////////// XML
- XML *XML::getInstance()
- {
- static XML xml;
- return &xml;
- }
- string XML::setXMLName(string name)
- {
- this->name.clear();
- return this->name = name;
- }
- bool XML::createXML()
- {
- //加载成功
- if (!Doc->LoadFile(this->name.c_str()))
- {
- return Doc->SaveFile(this->name.c_str());
- }
- return false;
- }
- bool XML::createXML(string name)
- {
- //加载成功
- if (!Doc->LoadFile(name.c_str()))
- {
- return Doc->SaveFile(name.c_str());
- }
- return false;
- }
- bool XML::loadXML(string name)
- {
- XML::createXML(name);
- TiXmlElement* e = NULL;
- for (e = Doc->FirstChildElement("Node"); e != NULL; e = e->NextSiblingElement())
- {
- if (e)
- {
- std::cout << "Account : " << e->Attribute("Account") << ", Password : " << e->Attribute("Password") << std::endl;
- }
- }
- return false;
- }
- bool XML::insert(string A, string P)
- {
- TiXmlElement* e = new TiXmlElement("Node");
- e->SetAttribute("Account",A.c_str());//得到玩家账号
- e->SetAttribute("Password", P.c_str());//得到玩家密码
- Doc->LinkEndChild(e);//存入文档
- //保存到文档
- return Doc->SaveFile(this->name.c_str());
- }
- bool XML::save()
- {
- return Doc->SaveFile(this->name.c_str());
- }
- bool XML::saveToNewFile(string name)
- {
- return Doc->SaveFile(name.c_str());
- }
- bool XML::addChild(string node, string key, string value)
- {
- TiXmlElement* e = new TiXmlElement(node.c_str());
- e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- Doc->LinkEndChild(e);//存入文档
- //保存到文档
- return Doc->SaveFile(this->name.c_str());
- }
- bool XML::addChild(string A, string AV, string P, string PV)
- {
- TiXmlElement* e = new TiXmlElement("Node");
- e->SetAttribute(A.c_str(), AV.c_str());
- e->SetAttribute(P.c_str(), PV.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- //e->SetAttribute(key.c_str(), value.c_str());
- Doc->LinkEndChild(e);//存入文档
- //保存到文档
- return Doc->SaveFile(this->name.c_str());
- }
- XML::XML()
- {
- name = "XML_FILE.xml";
- Doc = new TiXmlDocument();
- }
- XML::~XML()
- {
- if (Doc)
- {
- delete Doc;
- Doc = NULL;
- }
- if (!name.empty())
- {
- name.clear();
- }
- }
MD5 AND JSON AND XML的更多相关文章
- 转 JSON与XML转换
这两天处理模块的联调工作,在json与XML转换中出现了一些奇怪的问题,仔细究来,实为对org.json.*包知之太少.晚上baidu.google一下,找出了问题出现的原因.在模块中,使用了两个方法 ...
- protocol buffers vs json vs XML
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com 在分布式系统中,数据序列化传递的情形非常常见,主流的三种,JSON.XML.Protobuf. XML现在 ...
- .NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源
物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- iOS - 分析JSON、XML的区别和解析方式的底层是如何实现的(延伸实现原理)
<分析JSON.XML的区别,JSON.XML解析方式的底层是如何实现的(延伸实现原理)> (一)JSON与XML的区别: (1)可读性方面:基本相同,XML的可读性比较好: (2)可扩展 ...
- staxon实现json和xml互转
pom.xml: <dependency> <groupId>de.odysseus.staxon</groupId> <artifactId>stax ...
- JSON与XML的区别比较
1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许 ...
- PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据
如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...
- 【Yii2-CookBook】JSON 和 XML 输出
Web 和移动应用程序现在不仅仅只是用来呈现 HTML. 现在开发一个移动客户端,利用服务器 api 驱动前端,所有的用户交互都在客户端哪里.JSON 和 XML 格式通常用于序列化和传输结构化数据通 ...
- JSON与XML优缺点对比分析
本文从各个方面向大家对比展示了json和xml的优缺点,十分的全面细致,有需要的小伙伴可以参考下. 1. 定义介绍 1.1 XML定义 扩展标记语言 (Extensible Markup Langua ...
随机推荐
- SpringMVC前后端参数交互
Controller中使用JSON方式有多种 关键在于ajax请求是将数据以什么形式传递到后台 HTTP请求中: 如果是get请求,那么表单参数以name=value&name1=value1 ...
- NCM格式转换MP3格式
首先下载软件: 百度网盘下载地址:https://pan.baidu.com/s/1I_HUQGBnOq23Zdm-NgbnqA 提取码:u4m5 下载完毕直接打开就好 添加NCM文件 点击开始转换 ...
- JS对象 数组排序sort() sort()方法使数组中的元素按照一定的顺序排列。 语法: arrayObject.sort(方法函数)
数组排序sort() sort()方法使数组中的元素按照一定的顺序排列. 语法: arrayObject.sort(方法函数) 参数说明: 1.如果不指定<方法函数>,则按unicode码 ...
- elementUI+JS实现全选与反选
在实际项目开发过程中,遇到的需求,需要实现全选以及取消全选等功能,主要使用ElementUI + JS来实现,具体代码如下: <!DOCTYPE html> <html lang=& ...
- Simple example of use of __setstate__ and __getstate__
class Foo(object): def __init__(self, val=2): self.val = val def __getstate__(self): print ("I' ...
- 处理 vagrant Homestead 响应慢小记
环境 Homestead box: Homestead: v8.2.0 vagrant: 2.2.4 在Homestead中 安装nfs-kernel-server sudo apt-get inst ...
- 解决 php artisan route:list 报错oauth-private.key文件不存在或不可读的
进入项目根目录命令行执行 php artisan passport:install 然后执行php artisan route:list,会提示 Class App\Http\Controllers\ ...
- leetcood学习笔记-172-阶乘后的0
题目描述: 方法:不断除以 5, 是因为每间隔 5 个数有一个数可以被 5 整除, 然后在这些可被 5 整除的数中, 每间隔 5 个数又有一个可以被 25 整除, 故要再除一次, ... 直到结果为 ...
- docker快速安装elasticsearch
一.选择版本,拉取镜像 docker pull elasticsearch:5.6.9 #不选择版本就是最新的 二.运行设置容器 # -d 表示在后台运行 docker run -d -p 9200: ...
- CUDA并行计算 | CUDA算法效率提升关键点概述
文章目录 前言 存取效率 计算效率 性能优化要点 展现足够的并行性 优化内存访问 优化指令执行 前言 CUDA算法的效率总的来说,由存取效率和计算效率两类决定,一个好的CUDA算法必定会让两类效率 ...