[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都没太多合 ...
随机推荐
- 1.spring基础知识讲解
引言:以下记录一些自己在使用时pringle框架时的一些自己心得合成体会时,如有侵权,请联系本博主. 1. spring基本都使用 spring是一个开源的轻量级框架,其目的是用于简化企业级应用程序开 ...
- tomcat下的server.xml详解
说明:以下内容是自己看书时从书本上整理而来,在此记录一下,方便自己日后复习(自用),如果和网上帖子有相同,请联系本博主. server.xml文件描述了如果启动Tomcat server: <S ...
- [HTML]html读取本地文件并显示
<html> <body> <script script type="text/javascript"> function show() { v ...
- [osg]osgcallback各种回调使用的例子介绍
观察MyReadFileCallback结构体的内容,可以发现它继承自osgDB::Registry::ReadFileCallback,并重载了一个函数readNode,分析源代码可知,该函数在os ...
- tslint无法工作:Failed to load the TSLint library for the document
1--- 2--- 3---
- Eclipse项目左侧调整显示或者不显示路径
View Menu(倒三角)-->Package Presentation-->选择Flat或Hierarchical
- DirectX学习之第一个可运行的工程
学习一门开发语言的第一件事情当然是搭建一个可运行的环境,然后运行一个可成功执行的案例. 本人在学习DirectX的第一个工程的时候,参考了雨凇MoMo的一篇文章(https://www.xuanyus ...
- python 断言大全
参考链接:https://blog.csdn.net/qq1124794084/article/details/51668672 1. 小数位模糊等于 自动化脚本最重要的是断言,正确设置断言以后才能帮 ...
- Python 编程快速上手 第十一章 Web scrapping
前言 这一章讲了如何在 Web 上抓取相关的信息,工具是三个模块: webbrowser 模块:用于打开浏览器指定页面 requests 模块:用于下载文件 Beautiful Soup 模块:用于解 ...
- Python核心编程的四大神兽
http://www.cnblogs.com/ssy3340/p/9747722.html