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 ...
随机推荐
- 项目中UX设计1到2的设计提升总结
- 从身份证号提取生日并更新到生日字段中的SQL语句
1:根据身份证号 更新 生日字段 SQL update 学生信息 ,)+,)+,) 2:根据身份证号 更新 性别字段 SQL update 学生信息 set 性别='男' and substring( ...
- projects
layout title project 开源项目 本文记录我收藏的开源项目
- Spring入门(二)
Spring IOC&DI 控制反转(inversion of control):控制什么?什么反转? 我们都知道,传统的程序中,如果A类需要使用B类对象,会在程序中直接创建B类对象实例,此时 ...
- java zxing 生成条形码和二维吗
依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</art ...
- 起手一个mpvue项目准备
1,环境配置(http://mpvue.com/mpvue/quickstart.html) //全局安装vue-cli3脚手架 npm install -g @vue/cli @vue/cli-in ...
- Perl 循环
Perl 循环 有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推. 编程语言提供了更为复杂执行路径的多种控制结构. 循环语 ...
- 【集合!】 20140416 && 20140417集训 总结
mobius的奇怪演绎 当我第一眼看见题目中出现mobius的时候,我唯一想到的就是某科学家对于n维空间的阐述与思考,同时还提出了一个mobius环.而这道题中的环就是mobius环咯.不过其实这是一 ...
- SPOJ:[DIVCNT3]Counting Divisors
题目大意:求1~N的每个数因子数的立方和. 题解:由于N过大,我们不能直接通过线性筛求解.我们可以采用洲阁筛. 洲阁筛的式子可以写成: 对于F(1~√n),可以直接线性筛求解. 对于,我们进行以下DP ...
- APIO 2007 风铃
题目描述 你准备给弟弟 Ike 买一件礼物,但是,Ike 挑选礼物的方式很特别:他只喜欢那些能被他排成有序形状的东西. 你准备给 Ike 买一个风铃.风铃是一种多层的装饰品,一般挂在天花板上. 每个风 ...