windows C++读取plist文件方法

在做iOS开发时,或者是做iOS的逆向工程中,经常遇到读取plist文件, 

它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文件是xml格式的。

1,根据XML数据用来创建的内容属性列表,CFPropertyListRef可以是任何的属性列表对象:CFData,CFString,CFArray,CFDictionary,CFDate CFBoolean,CFNumber。请注意,如果您使用一个属性列表生成XML,任何字典的键在属性列表中必须CFString对象。


2,CFPropertyList提供一个抽象的属性列表类型能想到的CFPropertyList
 CFString面向对象术语作为超类,CFNumber CFDictionary等等。当核心基础函数返回一个CFPropertyListRef,这意味着属性的值可以是任何类型列表。例如,aCFPropertyListRef CFPreferencesCopyAppValue回报。这意味着,返回的值可以是一个CFString对象,CFNumber对象,再次CFDictionary对象等等。您可以使用CFGetTypeID决定什么类型的对象属性值列表。


3,您使用的一个CFPropertyListCreate……函数创建一个属性列表对象给现有的属性列表对象,原始XML数据(如一个文件),或者一个流。您还可以将一个属性列表对象转换成XML使用CFPropertyListCreateXMLData函数。
您使用CFPropertyListWriteToStream函数来编写一个属性列表输出流,并验证使用CFPropertyListIsValid函数属性列表对象。
CFPropertyList妥善照顾尾数法,发出一个属性列表(是否由流、XML或CFData对象)上创建一个powerpc的麦金塔是正确解释在基于intel的Macintosh,反之亦然。


本文主要从windows下读取plist讲起

首选提供一个工具plistcpp在https://github.com/animetrics/PlistCpp可以下载到完整版本,这里给出在windows下控制台版本下载


(若地址失效请联系我)


读取过程主要分两种情况

1,key后面直接有关键字,比如array,integer,string,bool,data等的直接读取即可

const vector<boost::any>& plistArray = boost::any_cast<const vector<boost::any>& >(dict.find("MobileTipsC2CVersion")->second)//再读取出array中数据

boost::any_cast<const int64_t&>(dict.find("XXX")->second)

//data数据的读取需要使用输入输出流 std::ifstream stream("xxx.png", std::ios::binary);


2,key后面跟dict关键字

const map<string, boost::any>& plistDict= boost::any_cast<const map<string, boost::any>& >(dict.find("XXX")->second);

然后再一次对dict目录进行读取,


本人手上有windows下IOS设备的数据采集的详细资料,有需求的可联系我QQ1354103455,欢迎同行朋友交流切磋。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 HDF5 库打开 Matlab 的 .mat 文件读取变量 data,可以按照以下步骤进行: 1. 安装 HDF5 库 要在 C++ 中使用 HDF5 库,需要先在计算机上安装 HDF5 库。可以从 HDF Group 的官方网站下载 HDF5 库,并按照文档中的说明进行安装。 2. 打开 .mat 文件 要打开 .mat 文件,需要使用 HDF5 库中的 H5Fopen() 函数。该函数的原型如下: ``` hid_t H5Fopen(const char *filename, unsigned flags, hid_t access_plist_id); ``` 其中,filename 是 .mat 文件的路径;flags 是打开文件的方式,通常设为 H5F_ACC_RDONLY 表示只读;access_plist_id 是访问文件的属性列表,通常设为 H5P_DEFAULT。 示例代码: ``` hid_t file_id = H5Fopen("example.mat", H5F_ACC_RDONLY, H5P_DEFAULT); ``` 3. 读取数据 要读取变量 data,需要先获取该变量在 .mat 文件中的路径。可以使用 Matlab 命令 whos 命令查看变量的路径。假设变量 data 的路径为 /data,可以按照以下步骤读取变量: (1)使用 H5Oopen() 函数打开变量所在的组: ``` hid_t group_id = H5Oopen(file_id, "/data", H5P_DEFAULT); ``` (2)使用 H5Dopen() 函数打开变量: ``` hid_t dataset_id = H5Dopen(group_id, "data", H5P_DEFAULT); ``` (3)使用 H5Dread() 函数读取变量的数据: ``` double data[N]; H5Dread(dataset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); ``` 其中,N 是变量 data 的元素个数,H5T_NATIVE_DOUBLE 表示数据类型是双精度浮点数。 完整的示例代码: ``` #include <hdf5.h> #include <iostream> using namespace std; int main() { // 打开 .mat 文件 hid_t file_id = H5Fopen("example.mat", H5F_ACC_RDONLY, H5P_DEFAULT); // 打开变量所在的组 hid_t group_id = H5Oopen(file_id, "/data", H5P_DEFAULT); // 打开变量 hid_t dataset_id = H5Dopen(group_id, "data", H5P_DEFAULT); // 读取变量的数据 const int N = 10; double data[N]; H5Dread(dataset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); // 输出数据 for (int i = 0; i < N; i++) { cout << data[i] << " "; } cout << endl; // 释放资源 H5Dclose(dataset_id); H5Oclose(group_id); H5Fclose(file_id); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值