[IOS微信] PList文件解析,boost数据读取
最近在解析IOS版微信数据中的 mmsetting.archive 文件时,第一次接触到PList文件。
注:mmsetting.archive 不是一个标准的PList文件,其中含有汉字,并且很多value没有对应的key值
在GITHUB上找到了开源的PListCpp库,可以解析PList文件。经过我的修改完善,可以读取汉字(见上一篇博客)
但读取出的数据在一个列表中,用到boost::any,
我对boost并不熟悉,经大牛帮忙,读取的数据方式如下:
std::map<std::string, boost::any> dict;
Plist::readPlist(“mmsetting.archive”, dict); for (auto it = dict.begin(); it != dict.end(); ++it)
{
// if (it->first == "$version")
// {
// const int& ver = boost::any_cast<const int&>(it->second);
//
// cout << "$version: " << ver << endl;
// }
std::string strStringType = "class std::basic_string";
std::string strMapType = "class std::map"; if (it->first == "$objects")
{
const std::vector<boost::any>& plistArray = boost::any_cast<const std::vector<boost::any>&>(it->second);
for (int i = ; i < plistArray.size(); i++)
{
// plistArray[i].type()
std::string typeName = plistArray[i].type().name();
std::string key_context_type = typeName.substr(, strStringType.length()); if (strStringType == key_context_type)
{
const std::string & key_context = boost::any_cast<const std::string &> (plistArray[i]);
//cout << key_context_type.c_str() << ": " << key_context.c_str() << endl;
vec.emplace_back(key_context);
}
else
{
key_context_type = typeName.substr(, strMapType.length());
if (strMapType == key_context_type)
{
//cout << key_context_type.c_str() << endl;
//const map<string, boost::any>& subdict = boost::any_cast<const map<string, boost::any> &> (plistArray[i]);
}
} }
}
} // const vector<boost::any>& plistArray = boost::any_cast<const vector<boost::any>&>(dict.find("testArray")->second);
// cout << boost::any_cast<const int64_t&>(plistArray[0]) << endl;
// cout << boost::any_cast<const string&>(plistArray[1]).c_str() << endl;
[IOS微信] PList文件解析,boost数据读取的更多相关文章
- iOS中plist的创建,数据写入与读取
iOS中plist的创建,数据写入与读取 Documents:应用将数据存储在Documents中,但基于NSuserDefaults的首选项设置除外Library:基于NSUserDefaults的 ...
- 蜗牛爱课- iOS中plist的创建,数据写入与读取
iOS中plist的创建,数据写入与读取功能创建一个test.plist文件-(void)triggerStorage{ NSArray *paths=NSSearchPathForDirect ...
- IOS 获取.plist文件的数据
@property (nonatomic,strong) NSArray *apps; //获取.plist数据 /**获取plist文件的数组数据*/ -(NSArray *)apps{ if( ...
- IOS开发-OC学习-Info.plist文件解析
Info.plist文件是新建ios项目完成后自动生成的一个配置文件,在Xcode中如下图: 通过解析可以获得配置的具体细节,解析过程如下: // 定义一个nsstring用来获取Info.plist ...
- IOS的XML文件解析,利用了NSData和NSFileHandle
如果需要了解关于文档对象模型和XML的介绍,参看 http://www.cnblogs.com/xinchrome/p/4890723.html 读取XML 上代码: NSFileHandle *fi ...
- iOS开发-plist文件增删改查
plist第一次看到这个后缀名文件的时候感觉怪怪的,不过接触久了也就习以为常了,plist是Property List的简称可以理解成属性列表文件,主要用来存储串行化后的对象的文件.扩展名为.plis ...
- iOS 中plist文件中配置key值冲突的现象
iOS开发一些特殊的软件需要在项目中配置对应的key值,然而近期在项目中发现一个有意思的现象,苹果官方文档中提供的key值很多,但其实有一些彼此可能有冲突,当你同时配置了彼此冲突的key值,可能会出现 ...
- Python: 文件操作与数据读取
文件及目录操作 python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块,主要用到的几个函数是, import os 返回指定目录下的所有文件和目录名: os.listdir() 重命名: ...
- iOS instruments trace文件解析方案
前言 已很少写文章,不过这次感觉有必要写一下.因为: 1. 这个方案通过debug逆向得来,很有参考意义. 2. iOS这方面资料非常少,做这块时,无论国内外,翻遍了google,baidu都没太多合 ...
随机推荐
- Java的CountDownLatch和CyclicBarrier的理解和区别
CountDownLatch和CyclicBarrier的功能看起来很相似,不易区分,有一种谜之的神秘.本文将通过通俗的例子并结合代码讲解两者的使用方法和区别. CountDownLatch和Cycl ...
- [原][粒子特效][spark]插值器interpolator
深入浅出spark粒子特效连接:https://www.cnblogs.com/lyggqm/p/9956344.html 插值器是体现粒子生命周期变化的功能 group使用到插值器的方式: 可以看到 ...
- Object_C与JavaScript交互使用总结
iOS开发中oc与js交互的方式有很多,我们可以使用流行的第三方库如:WebviewJavaScriptBridge和OVGap,这两个库都是让webview与JS建立起一条桥梁,我们也可以使用iOS ...
- Java 多条件复杂排序小结
前言 今天下午做了拼多多在牛客网上的在线笔试题,感觉自己的智商被鄙视到了···不过其中一道题的某一部分引起了我极大的兴趣,感觉可以总结一下,做好积累~ 题目的部分我拍照如下所示 这里面最复杂的就是第3 ...
- 学习笔记58—3D杯子设计
软件下载:http://www.i3done.com/ 界面如下: 3D杯子设计步骤(参考:http://www.i3done.com/news/video/402.html): 生成杯体 1.点击基 ...
- dict使用
里面的元素是:key: value d = { 'Adam':95, 'Lisa':85, 'Bart':59, 'Paul':75 } 打印:print d['Paul'] 注意: 通过 key ...
- Qt网络应用开发初步
应用层的网络协议,如HTTP/FTP/SMTP等简称"应用协议",他们运行在TCP/UDP之上,从Qt5开始,已经不再分别提供QHttp类,QFtp类,应用层的编程使用QNet ...
- Import Projects from git
1:工具栏window -->show view -->Other
- 当启动tomcat时出现tomcat setting should be set in tomcat preference page
转自:https://blog.csdn.net/withyou_wy/article/details/53081800 出现此状况证明你的tomcat在配置的时候没有配置成功,通过以下两个步骤即可以 ...
- vux 给元素动态添加css
<template> <div class="jdtI" :style="{styleObj}"></div> </t ...