If it is not for learning purpose, and if you have freedom in choosing the binary format you’d better consider using something like protobuf which will handle the serialization for you and allow to interoperate with other platforms and languages.
If you cannot use a third party API, you may look at QDataStream for inspiration
- Documentation
- Source code