PlistCpp icon indicating copy to clipboard operation
PlistCpp copied to clipboard

About new types

Open AiXanadu opened this issue 3 years ago • 0 comments

I found the apple description

HEADER magic number ("bplist") file format version (currently "0?")

OBJECT TABLE variable-sized objects

Object Formats (marker byte followed by additional info in some cases)
null	0000 0000			// null object [v"1?"+ only]
bool	0000 1000			// false
bool	0000 1001			// true
url	0000 1100	string		// URL with no base URL, recursive encoding of URL string [v"1?"+ only]
url	0000 1101	base string	// URL with base URL, recursive encoding of base URL, then recursive encoding of URL string [v"1?"+ only]
uuid	0000 1110			// 16-byte UUID [v"1?"+ only]
fill	0000 1111			// fill byte
int	0001 0nnn	...		// # of bytes is 2^nnn, big-endian bytes
real	0010 0nnn	...		// # of bytes is 2^nnn, big-endian bytes
date	0011 0011	...		// 8 byte float follows, big-endian bytes
data	0100 nnnn	[int]	...	// nnnn is number of bytes unless 1111 then int count follows, followed by bytes
string	0101 nnnn	[int]	...	// ASCII string, nnnn is # of chars, else 1111 then int count, then bytes
string	0110 nnnn	[int]	...	// Unicode string, nnnn is # of chars, else 1111 then int count, then big-endian 2-byte uint16_t
string	0111 nnnn	[int]	...	// UTF8 string, nnnn is # of chars, else 1111 then int count, then bytes [v"1?"+ only]
uid	1000 nnnn	...		// nnnn+1 is # of bytes
	1001 xxxx			// unused
array	1010 nnnn	[int]	objref*	// nnnn is count, unless '1111', then int count follows
ordset	1011 nnnn	[int]	objref* // nnnn is count, unless '1111', then int count follows [v"1?"+ only]
set	1100 nnnn	[int]	objref* // nnnn is count, unless '1111', then int count follows [v"1?"+ only]
dict	1101 nnnn	[int]	keyref* objref*	// nnnn is count, unless '1111', then int count follows
	1110 xxxx			// unused
	1111 xxxx			// unused

OFFSET TABLE list of ints, byte size of which is given in trailer -- these are the byte offsets into the file -- number of these is in the trailer

TRAILER byte size of offset ints in offset table byte size of object refs in arrays and dicts number of offsets in offset table (also is number of objects) element # in offset table which is top level object offset table offset

When I build a plist, I throw an exception if the data type is uid.

Do you plan to solve it?

In addition, can you tell me the specific meaning of trailer? I'm going to study it myself, but I don't quite understand.

thank you

AiXanadu avatar May 27 '21 12:05 AiXanadu