The header consists of an 8 byte magic number (see below), followed by a 1-byte major version number and 1-byte minor version number.
Changes in minor numbers should not cause problems for parsers. It indicates a change in chunk types (different contents), but the file format is the same.
The major number is reserved for any incompatible file format changes (which hopefully should be never).
/* The header */ typedef struct { unsigned char magic[8]; /* 0xae5a54520d0a1a0a (be) */ unsigned char version_major; /* 1 */ unsigned char version_minor; /* 2 */ } ztr_header_t; /* The ZTR magic numbers */ #define ZTR_MAGIC "\256ZTR\r\n\032\n" #define ZTR_VERSION_MAJOR 1 #define ZTR_VERSION_MINOR 2
So the total header will consist of:
Byte number 0 1 2 3 4 5 6 7 8 9 +--+--+--+--+--+--+--+--+--+--+ Hex values |ae 5a 54 52 0d 0a 1a 0d|01 02| +--+--+--+--+--+--+--+--+--+--+