MD5JSON.h

  1. #pragma once
  2. #include "include/json/json.h"
  3. #include "include/md5/md5.h"
  4. #include "xml/tinyxml/tinystr.h"
  5. #include "xml/tinyxml/tinyxml.h"
  6. #include <string>
  7. using namespace std;
  8.  
  9. #pragma comment(lib,"md5_JSON\\include\\bin\\json_vc71_libmtd.lib")
  10. #define MJ MD5JSON::getInstance()
  11. #define JSON Json
  12. #define XM XML::getInstance()
  13.  
  14. // //多线程调试 (/MTd)
  15. class MD5JSON
  16. {
  17. //md5
  18. md5_state_t m_context;
  19. unsigned char m_Digest[];
  20. char m_outstr[];
  21. //json
  22. char *buf;
  23. Json::Reader reader;
  24. Json::Value root;
  25. string m_jsonfilename;
  26. Json::Value jsonItem;
  27. public:
  28. ///////////////////////// MD5
  29. static MD5JSON *getInstance();
  30.  
  31. bool setmd5(const char *data);
  32.  
  33. bool setmd5(const char *data, char *buffer, int bufferLen);
  34.  
  35. bool setmd5(const char *data, int datalen);
  36.  
  37. bool setmd5(string data);
  38.  
  39. bool setmd5(string data, char *buffer, int bufferLen);
  40.  
  41. void print();
  42.  
  43. void print(char *data);
  44.  
  45. void print(string data);
  46.  
  47. void print(const char *data);
  48.  
  49. char *getmd5() { return m_outstr; }
  50.  
  51. public:
  52. ///////////////////////// JSON
  53. bool createJSONFile(const char *filename);
  54. bool createJSONFile(string filename);
  55. string getFileName() { return m_jsonfilename; }
  56. Json::Value getRoot() { return this->root; }
  57. Json::Value getItem() { return this->jsonItem; }
  58. bool readJSONFile(const char *filename);
  59. bool readJSONFile(string filename);
  60. //直接写入文件
  61. bool insertData(const char *data);
  62. //json 方法写入并baocun
  63. bool insertData();
  64. //如果相同则覆盖
  65. //==================================================
  66. bool addChild(const char *key,const char *value);
  67. //MD5JSON::insertData(); 内部已经调用
  68. void addChildEnd();
  69. //==================================================
  70.  
  71. char *getJSONData() { return buf; }
  72. //在加载文件时此函数就已经调用
  73. bool parseJSON();
  74. //这里只有在一个root下才有效
  75. int get_int(const char *key);
  76. string get_string(const char *key);
  77. unsigned int get_uint(const char *key);
  78. double get_double(const char *key);
  79. bool get_bool(const char *key);
  80. const char *get_const_string(const char *key);
  81. //清楚整个文件数据
  82. void clear();
  83.  
  84. //遍历
  85. void ergodicObject(Json::Value::Members &object);
  86. void ergodicObject(Json::Value &root, Json::Value::Members &object);
  87. //数组遍历
  88. void ergodicArray(Json::Value &root);
  89. private:
  90. //f30992da54715e5a0c4a7eaf29889641 //vico
  91.  
  92. MD5JSON()
  93. {
  94. this->m_context = { };
  95. memset(this->m_Digest, , sizeof(this->m_Digest));
  96. memset(this->m_outstr, , sizeof(this->m_outstr));
  97. }
  98. ~MD5JSON()
  99. {
  100. if (buf)
  101. {
  102. delete[] buf;
  103. buf = NULL;
  104. }
  105. }
  106. };
  107.  
  108. class XML
  109. {
  110. string name;
  111. TiXmlDocument* Doc;
  112. public:
  113. static XML *getInstance();
  114. string setXMLName(string name);
  115. bool createXML();
  116. bool createXML(string name);
  117. bool loadXML(string name);
  118. //Accout Password
  119. bool insert(string A, string P);
  120. bool save();
  121. bool saveToNewFile(string name);
  122. //node 除非你知道在做什么
  123. bool addChild(string node, string key, string value);
  124. //Accout AccoutValue Password PasswordValue
  125. bool addChild(string A, string AV,string P,string PV);
  126.  
  127. private:
  128. XML();
  129. ~XML();
  130. };

MD5JSON.cpp

  1. #include "MD5JSON.h"
  2.  
  3. ///////////////////////// MD5
  4. MD5JSON *MD5JSON::getInstance()
  5. {
  6. static MD5JSON md5json;
  7. return &md5json;
  8. }
  9.  
  10. bool MD5JSON::setmd5(const char *data)
  11. {
  12. if (data)
  13. {
  14. md5_byte_t byteData[] = { };
  15. memset(byteData, , sizeof(byteData));
  16. int len = ;
  17. while (data[len])
  18. {
  19. byteData[len] = data[len];
  20. len++;
  21. }
  22. /*
  23. pms->abcd[1] = /*0xefcdab89 // T_MASK ^ 0x10325476;
  24. pms->abcd[2] = /*0x98badcfe // T_MASK ^ 0x67452301;
  25. */
  26. md5_init(&m_context);
  27. md5_append(&m_context, byteData, len);
  28. md5_finish(&m_context, m_Digest);
  29.  
  30. sprintf_s(m_outstr,
  31. "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
  32. m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
  33. m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
  34. m_Digest[], m_Digest[], m_Digest[], m_Digest[]);
  35. return true;
  36. }
  37. return false;
  38. }
  39.  
  40. bool MD5JSON::setmd5(const char *data, char *buffer, int bufferLen)
  41. {
  42. if (data && buffer && bufferLen)
  43. {
  44. md5_byte_t byteData[] = { };
  45. memset(byteData, , sizeof(byteData));
  46. int len = ;
  47. while (data[len])
  48. {
  49. byteData[len] = data[len];
  50. len++;
  51. }
  52. /*
  53. pms->abcd[1] = /*0xefcdab89 // T_MASK ^ 0x10325476;
  54. pms->abcd[2] = /*0x98badcfe // T_MASK ^ 0x67452301;
  55. */
  56. md5_init(&m_context);
  57. md5_append(&m_context, byteData, len);
  58. md5_finish(&m_context, m_Digest);
  59.  
  60. sprintf_s(m_outstr,
  61. "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
  62. m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
  63. m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
  64. m_Digest[], m_Digest[], m_Digest[], m_Digest[]);
  65. strcpy_s(buffer, bufferLen, m_outstr);
  66. return true;
  67. }
  68. return false;
  69. }
  70.  
  71. bool MD5JSON::setmd5(const char *data, int datalen)
  72. {
  73. if (data && datalen)
  74. {
  75. md5_byte_t byteData[] = { };
  76. memset(byteData, , sizeof(byteData));
  77. while (data[datalen - ])
  78. {
  79. byteData[datalen - ] = data[datalen - ];
  80. datalen--;
  81. }
  82. /*
  83. pms->abcd[1] = /*0xefcdab89 // T_MASK ^ 0x10325476;
  84. pms->abcd[2] = /*0x98badcfe // T_MASK ^ 0x67452301;
  85. */
  86. md5_init(&m_context);
  87. md5_append(&m_context, byteData, datalen - );
  88. md5_finish(&m_context, m_Digest);
  89.  
  90. sprintf_s(m_outstr,
  91. "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
  92. m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
  93. m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[], m_Digest[],
  94. m_Digest[], m_Digest[], m_Digest[], m_Digest[]);
  95. return true;
  96. }
  97. return false;
  98. }
  99.  
  100. bool MD5JSON::setmd5(string data)
  101. {
  102. return MD5JSON::setmd5(data.c_str());
  103. }
  104.  
  105. bool MD5JSON::setmd5(string data, char *buffer, int bufferLen)
  106. {
  107. return MD5JSON::setmd5(data.c_str(),buffer,bufferLen);
  108. }
  109.  
  110. void MD5JSON::print()
  111. {
  112. printf("%s\n", m_outstr);
  113. }
  114.  
  115. void MD5JSON::print(char *data)
  116. {
  117. printf("%s\n", data);
  118. }
  119.  
  120. void MD5JSON::print(string data)
  121. {
  122. printf("%s\n", data.c_str());
  123. }
  124.  
  125. void MD5JSON::print(const char *data)
  126. {
  127. printf("%s\n", data);
  128. }
  129.  
  130. ///////////////////////// JSON
  131. bool MD5JSON::createJSONFile(const char *filename)
  132. {
  133. m_jsonfilename = filename;
  134. FILE *File = NULL;
  135. fopen_s(&File, filename, "wb");
  136. if (File)
  137. {
  138. fclose(File);
  139. File = NULL;
  140. return true;
  141. }
  142. return false;
  143. }
  144.  
  145. bool MD5JSON::createJSONFile(string filename)
  146. {
  147. return MD5JSON::createJSONFile(filename.c_str());
  148. }
  149.  
  150. bool MD5JSON::readJSONFile(const char *filename)
  151. {
  152.  
  153. m_jsonfilename = filename;
  154. FILE *File = NULL;
  155. fopen_s(&File, filename, "rb");
  156. if (File)
  157. {
  158. rewind(File);
  159. //从0开始偏移到最后
  160. fseek(File, , SEEK_END);
  161. int size = ftell(File);
  162. //rewind(File);
  163. //从0开始偏移到0的位置
  164. fseek(File, , SEEK_SET);
  165. //文件当前读写位置
  166. //fseek(File, 0, SEEK_CUR);
  167.  
  168. buf = new char[size + ];
  169. int read = fread_s(buf, size + , size, , File);
  170. rewind(File);
  171.  
  172. fclose(File);
  173. File = NULL;
  174. return MD5JSON::parseJSON();
  175. }
  176. return false;
  177. }
  178.  
  179. bool MD5JSON::readJSONFile(string filename)
  180. {
  181. return MD5JSON::readJSONFile(filename.c_str());
  182. }
  183.  
  184. bool MD5JSON::insertData(const char *data)
  185. {
  186. FILE *File = NULL;
  187. fopen_s(&File, this->m_jsonfilename.c_str(), "wb+");
  188. if (File)
  189. {
  190. int len = strlen(data);
  191. fwrite(data, len, , File);
  192. fclose(File);
  193. File = NULL;
  194. return true;
  195. }
  196. return false;
  197. }
  198.  
  199. bool MD5JSON::insertData()
  200. {
  201. return MJ->insertData(this->root.toStyledString().c_str());
  202. }
  203.  
  204. bool MD5JSON::addChild(const char *key, const char *value)
  205. {
  206. if (key && value)
  207. {
  208. jsonItem[key] = value;
  209. return true;
  210. }
  211. return false;
  212. }
  213.  
  214. void MD5JSON::addChildEnd()
  215. {
  216. this->root.append(jsonItem);
  217. MD5JSON::insertData();
  218. }
  219.  
  220. bool MD5JSON::parseJSON()
  221. {
  222. if (this->reader.parse(MJ->getJSONData(), this->root))
  223. {
  224. Json::Value::Members member = this->root.getMemberNames();
  225. MD5JSON::ergodicObject(this->root,member);
  226.  
  227. //int size_i = member.size();
  228. //for (int i = 0; i < size_i; i++)
  229. //{
  230. // if (this->root[member[i].c_str()].isObject())
  231. // {
  232. // Json::Value::Members temp = this->root[member[i].c_str()].getMemberNames();
  233. // MD5JSON::ergodicObject(this->root[member[i].c_str()],temp);
  234. // int size_j = temp.size();
  235. // for (int j = 0; j < size_j; j++)
  236. // {
  237. // if ((this->root[member[i].c_str()])[temp[j].c_str()].isObject())
  238. // {
  239. // Json::Value::Members tmp = (this->root[member[i].c_str()])[temp[j].c_str()].getMemberNames();
  240. // MD5JSON::ergodicObject(this->root[member[i].c_str()][temp[j].c_str()],tmp);
  241. // int size_k = tmp.size();
  242. // for (int k = 0; k < size_k; k++)
  243. // {
  244. // if ((this->root[member[i].c_str()])[temp[j].c_str()][tmp[k].c_str()].isObject())
  245. // {
  246. // Json::Value::Members tm = ((this->root[member[i].c_str()])[temp[j].c_str()])[tmp[k].c_str()].getMemberNames();
  247. // MD5JSON::ergodicObject(this->root[member[i].c_str()][temp[j].c_str()][tmp[k].c_str()], tm);
  248. // int size_n = tm.size();
  249. // for (int n = 0; n < size_n; n++)
  250. // {
  251. // if ((this->root[member[i].c_str()])[temp[j].c_str()][tmp[k].c_str()][tm[n].c_str()].isObject())
  252. // {
  253. // Json::Value::Members t = (((this->root[member[i].c_str()])[temp[j].c_str()])[tmp[k].c_str()])[tm[n].c_str()].getMemberNames();
  254. // MD5JSON::ergodicObject(this->root[member[i].c_str()][temp[j].c_str()][tmp[k].c_str()][tm[n].c_str()], t);
  255. // }
  256. // }
  257. // }
  258. // }
  259. // }
  260. // }
  261. // }
  262. //}
  263. return true;
  264. }
  265. return false;
  266. }
  267.  
  268. void MD5JSON::ergodicObject(Json::Value::Members &object)
  269. {
  270. int size = object.size();
  271. for (int i = ; i < size; i++)
  272. {
  273. std::cout << object[i] << std::endl;
  274. }
  275. }
  276.  
  277. void MD5JSON::ergodicObject(Json::Value &root, Json::Value::Members &object)
  278. {
  279. int size = object.size();
  280. for (int i = ; i < size; i++)
  281. {
  282. if (root[object[i].c_str()].isArray())
  283. {
  284. std::cout << "Key = " << object[i] << " , Value = Array"<< std::endl;
  285.  
  286. MD5JSON::ergodicArray(root[object[i].c_str()]);
  287. }
  288. else if (root[object[i].c_str()].isBool())
  289. {
  290. std::cout << "Key = " << object[i] << " , Value = " << root[object[i].c_str()].asBool() << std::endl;
  291. }
  292. else if (root[object[i].c_str()].isDouble())
  293. {
  294. std::cout << "Key = " << object[i] << " , Value = " << root[object[i].c_str()].asDouble() << std::endl;
  295. }
  296. else if (root[object[i].c_str()].isInt())
  297. {
  298. std::cout << "Key = " << object[i] << " , Value = " << root[object[i].c_str()].asInt() << std::endl;
  299. }
  300. else if (root[object[i].c_str()].isString())
  301. {
  302. std::cout << "Key = " << object[i] << " , Value = ";
  303. printf("%s\n", root[object[i].c_str()].asString().c_str());
  304.  
  305. }
  306. else if (root[object[i].c_str()].isObject())
  307. {
  308. std::cout << "Key = " << object[i] << " , Value = Object"<< std::endl;
  309.  
  310. Json::Value::Members tmp = root[object[i].c_str()].getMemberNames();
  311. MD5JSON::ergodicObject(root[object[i].c_str()], tmp);
  312. }
  313. }
  314. }
  315.  
  316. void MD5JSON::ergodicArray(Json::Value &root)
  317. {
  318. int size = root.size();
  319. for (int i = ; i < size; i++)
  320. {
  321. string str = root[i].toStyledString();
  322. //printf("%s\n", str.c_str());
  323. Json::Value::Members tmp = root[i].getMemberNames();
  324. MD5JSON::ergodicObject(root[i], tmp);
  325. }
  326. }
  327.  
  328. int MD5JSON::get_int(const char *key)
  329. {
  330. if (root[key].isInt())
  331. return root[key].asInt();
  332. return ;
  333. }
  334.  
  335. string MD5JSON::get_string(const char *key)
  336. {
  337. if (root[key].isString())
  338. return root[key].asString();
  339. string str;
  340. return str;
  341. }
  342.  
  343. unsigned int MD5JSON::get_uint(const char *key)
  344. {
  345. if (root[key].isUInt())
  346. return root[key].asUInt();
  347. return -;
  348. }
  349.  
  350. double MD5JSON::get_double(const char *key)
  351. {
  352. if (root[key].isDouble())
  353. return root[key].asDouble();
  354. return -1.0;
  355. }
  356.  
  357. bool MD5JSON::get_bool(const char *key)
  358. {
  359. if (root[key].isBool())
  360. return root[key].asBool();
  361. return false;
  362. }
  363.  
  364. const char *MD5JSON::get_const_string(const char *key)
  365. {
  366. if (root[key].isString())
  367. return root[key].asCString();
  368. return NULL;
  369. }
  370.  
  371. void MD5JSON::clear()
  372. {
  373. FILE *File = NULL;
  374. fopen_s(&File, this->m_jsonfilename.c_str(), "rb");
  375. if (File)
  376. {
  377. string head("del ");
  378. head += this->m_jsonfilename;
  379. int c = system(head.c_str());
  380. if (!c)
  381. {
  382. MJ->createJSONFile(this->m_jsonfilename.c_str());
  383. delete[] buf;
  384. buf = NULL;
  385. return;
  386. }
  387. }
  388. MJ->createJSONFile(this->m_jsonfilename.c_str());
  389. delete[] buf;
  390. buf = NULL;
  391. }
  392.  
  393. ///////////////////////////////////////////////////////// XML
  394.  
  395. XML *XML::getInstance()
  396. {
  397. static XML xml;
  398. return &xml;
  399. }
  400.  
  401. string XML::setXMLName(string name)
  402. {
  403. this->name.clear();
  404. return this->name = name;
  405. }
  406.  
  407. bool XML::createXML()
  408. {
  409. //加载成功
  410. if (!Doc->LoadFile(this->name.c_str()))
  411. {
  412. return Doc->SaveFile(this->name.c_str());
  413. }
  414. return false;
  415. }
  416.  
  417. bool XML::createXML(string name)
  418. {
  419. //加载成功
  420. if (!Doc->LoadFile(name.c_str()))
  421. {
  422. return Doc->SaveFile(name.c_str());
  423. }
  424. return false;
  425. }
  426.  
  427. bool XML::loadXML(string name)
  428. {
  429. XML::createXML(name);
  430.  
  431. TiXmlElement* e = NULL;
  432. for (e = Doc->FirstChildElement("Node"); e != NULL; e = e->NextSiblingElement())
  433. {
  434. if (e)
  435. {
  436. std::cout << "Account : " << e->Attribute("Account") << ", Password : " << e->Attribute("Password") << std::endl;
  437. }
  438. }
  439. return false;
  440. }
  441.  
  442. bool XML::insert(string A, string P)
  443. {
  444. TiXmlElement* e = new TiXmlElement("Node");
  445. e->SetAttribute("Account",A.c_str());//得到玩家账号
  446. e->SetAttribute("Password", P.c_str());//得到玩家密码
  447. Doc->LinkEndChild(e);//存入文档
  448. //保存到文档
  449. return Doc->SaveFile(this->name.c_str());
  450. }
  451.  
  452. bool XML::save()
  453. {
  454. return Doc->SaveFile(this->name.c_str());
  455. }
  456.  
  457. bool XML::saveToNewFile(string name)
  458. {
  459. return Doc->SaveFile(name.c_str());
  460. }
  461.  
  462. bool XML::addChild(string node, string key, string value)
  463. {
  464. TiXmlElement* e = new TiXmlElement(node.c_str());
  465. e->SetAttribute(key.c_str(), value.c_str());
  466. //e->SetAttribute(key.c_str(), value.c_str());
  467. //e->SetAttribute(key.c_str(), value.c_str());
  468. //e->SetAttribute(key.c_str(), value.c_str());
  469. //e->SetAttribute(key.c_str(), value.c_str());
  470. //e->SetAttribute(key.c_str(), value.c_str());
  471. //e->SetAttribute(key.c_str(), value.c_str());
  472. //e->SetAttribute(key.c_str(), value.c_str());
  473. //e->SetAttribute(key.c_str(), value.c_str());
  474. Doc->LinkEndChild(e);//存入文档
  475. //保存到文档
  476. return Doc->SaveFile(this->name.c_str());
  477. }
  478.  
  479. bool XML::addChild(string A, string AV, string P, string PV)
  480. {
  481. TiXmlElement* e = new TiXmlElement("Node");
  482. e->SetAttribute(A.c_str(), AV.c_str());
  483. e->SetAttribute(P.c_str(), PV.c_str());
  484. //e->SetAttribute(key.c_str(), value.c_str());
  485. //e->SetAttribute(key.c_str(), value.c_str());
  486. //e->SetAttribute(key.c_str(), value.c_str());
  487. //e->SetAttribute(key.c_str(), value.c_str());
  488. //e->SetAttribute(key.c_str(), value.c_str());
  489. //e->SetAttribute(key.c_str(), value.c_str());
  490. //e->SetAttribute(key.c_str(), value.c_str());
  491. //e->SetAttribute(key.c_str(), value.c_str());
  492. Doc->LinkEndChild(e);//存入文档
  493. //保存到文档
  494. return Doc->SaveFile(this->name.c_str());
  495. }
  496.  
  497. XML::XML()
  498. {
  499. name = "XML_FILE.xml";
  500. Doc = new TiXmlDocument();
  501. }
  502.  
  503. XML::~XML()
  504. {
  505. if (Doc)
  506. {
  507. delete Doc;
  508. Doc = NULL;
  509. }
  510. if (!name.empty())
  511. {
  512. name.clear();
  513. }
  514. }

MD5 AND JSON AND XML的更多相关文章

  1. 转 JSON与XML转换

    这两天处理模块的联调工作,在json与XML转换中出现了一些奇怪的问题,仔细究来,实为对org.json.*包知之太少.晚上baidu.google一下,找出了问题出现的原因.在模块中,使用了两个方法 ...

  2. protocol buffers vs json vs XML

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com   在分布式系统中,数据序列化传递的情形非常常见,主流的三种,JSON.XML.Protobuf.   XML现在 ...

  3. .NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源

    物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...

  4. iOS - 分析JSON、XML的区别和解析方式的底层是如何实现的(延伸实现原理)

    <分析JSON.XML的区别,JSON.XML解析方式的底层是如何实现的(延伸实现原理)> (一)JSON与XML的区别: (1)可读性方面:基本相同,XML的可读性比较好: (2)可扩展 ...

  5. staxon实现json和xml互转

    pom.xml: <dependency> <groupId>de.odysseus.staxon</groupId> <artifactId>stax ...

  6. JSON与XML的区别比较

    1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许 ...

  7. PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据

    如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...

  8. 【Yii2-CookBook】JSON 和 XML 输出

    Web 和移动应用程序现在不仅仅只是用来呈现 HTML. 现在开发一个移动客户端,利用服务器 api 驱动前端,所有的用户交互都在客户端哪里.JSON 和 XML 格式通常用于序列化和传输结构化数据通 ...

  9. JSON与XML优缺点对比分析

    本文从各个方面向大家对比展示了json和xml的优缺点,十分的全面细致,有需要的小伙伴可以参考下. 1. 定义介绍 1.1 XML定义 扩展标记语言 (Extensible Markup Langua ...

随机推荐

  1. SpringMVC前后端参数交互

    Controller中使用JSON方式有多种 关键在于ajax请求是将数据以什么形式传递到后台 HTTP请求中: 如果是get请求,那么表单参数以name=value&name1=value1 ...

  2. NCM格式转换MP3格式

    首先下载软件: 百度网盘下载地址:https://pan.baidu.com/s/1I_HUQGBnOq23Zdm-NgbnqA 提取码:u4m5 下载完毕直接打开就好 添加NCM文件 点击开始转换 ...

  3. JS对象 数组排序sort() sort()方法使数组中的元素按照一定的顺序排列。 语法: arrayObject.sort(方法函数)

    数组排序sort() sort()方法使数组中的元素按照一定的顺序排列. 语法: arrayObject.sort(方法函数) 参数说明: 1.如果不指定<方法函数>,则按unicode码 ...

  4. elementUI+JS实现全选与反选

    在实际项目开发过程中,遇到的需求,需要实现全选以及取消全选等功能,主要使用ElementUI + JS来实现,具体代码如下: <!DOCTYPE html> <html lang=& ...

  5. Simple example of use of __setstate__ and __getstate__

    class Foo(object): def __init__(self, val=2): self.val = val def __getstate__(self): print ("I' ...

  6. 处理 vagrant Homestead 响应慢小记

    环境 Homestead box: Homestead: v8.2.0 vagrant: 2.2.4 在Homestead中 安装nfs-kernel-server sudo apt-get inst ...

  7. 解决 php artisan route:list 报错oauth-private.key文件不存在或不可读的

    进入项目根目录命令行执行 php artisan passport:install 然后执行php artisan route:list,会提示 Class App\Http\Controllers\ ...

  8. leetcood学习笔记-172-阶乘后的0

    题目描述: 方法:不断除以 5, 是因为每间隔 5 个数有一个数可以被 5 整除, 然后在这些可被 5 整除的数中, 每间隔 5 个数又有一个可以被 25 整除, 故要再除一次, ... 直到结果为 ...

  9. docker快速安装elasticsearch

    一.选择版本,拉取镜像 docker pull elasticsearch:5.6.9 #不选择版本就是最新的 二.运行设置容器 # -d 表示在后台运行 docker run -d -p 9200: ...

  10. CUDA并行计算 | CUDA算法效率提升关键点概述

    文章目录 前言 存取效率 计算效率 性能优化要点 展现足够的并行性 优化内存访问 优化指令执行 前言   CUDA算法的效率总的来说,由存取效率和计算效率两类决定,一个好的CUDA算法必定会让两类效率 ...