解析IOS二进制格式的bplist

时间:2022-03-21 21:02:45

关于二进制格式的plist,搜到一篇博客《详解Binary Plist格式》,介绍的很详细,但是结合github上关于一份解析bplist的代码通过结果实际来看,博客中解析对象表的说明出现了问题,同原文不同处贴在下面


类型 HEX 说明
单字节 0X X=0:空值 X=8:布尔假 X=9:布尔真
整数 1X 后面跟的2^X个字节就是这个数字的值
浮点数 2X 后面跟的2^X个字节就是这个数字的值
日期 33 后面接着8个字节的浮点数时间戳
二进制 4X X表示这段数据的字节数,如果X=F,则后面取一个字节的后四位记为Y,随后的2^Y个字节解析为整数Z,即为这段数据的字节数
字符串 5X ASCII编码 X表示这段数据的字节数,如果X=F则后面作为整数对象继续解析所得数既为字节数如果X=F,则后面取一个字节的后四位记为Y,随后的2^Y个字节解析为整数Z,即为这段数据的字节数
字符串 6X Unicode编码 X表示这段数据的字节数,如果X=F则后面作为整数对象继续解析所得数既为字节数 如果X=F,则后面取一个字节的后四位记为Y,随后的2^Y个字节解析为整数Z,即为这段数据的字节数,记得双字节!
UID 8X X+1表示这段数据的字节数 现在被当做字符串来处理
数组 AX X表示其元素个数,如果X=F则后面作为整数对象继续解析所得数既为个数如果X=F,则后面取一个字节的后四位记为Y,随后的2^Y个字节解析为整数Z,即为这个数组的元素个数,  后面接着X或Z个元素在偏移表的位置
集合 CX X表示其元素个数,如果X=F则后面作为整数对象继续解析所得数既为个数如果X=F,则后面取一个字节的后四位记为Y,随后的2^Y个字节解析为整数Z,即为这段集合的元素个数, 后面接着X或Z个元素在偏移表的位置
字典 DX X表示其元素个数,如果X=F则后面作为整数对象继续解析所得数既为个数 如果X=F,则后面取一个字节的后四位记为Y,随后的2^Y个字节解析为整数Z,即为这段数据的字节数, 后面接着X或Z个key在偏移表的位置,X个value在偏移表的位置


另我个人写了一份解析bplist的python代码,上传在了github