PacketBuffer is a C++14 header-only library designed specifically to be really fast at processing binary network packets. It supports many of the C++ standard containers, including:
std::arrayT[S](statically sized arrays)std::chrono::durationstd::chrono::time_pointstd::vectorstd::mapstd::unordered_mapstd::liststd::setstd::unoredered_setstd::stringstd::tuplestd::pairstd::experimental::optional
It also supports endian swapping the following types:
uint8_t, int8_t,
uint16_t, int16_t,
uint32_t, int32_t,
uint64_t, int64_t.
using namespace PacketBuffer;
std::stringstream ss;
Packer<std::stringstream> packer(ss);
packer.pack(uint8_t(100));
That's it!
But wait, you probably want something more than just packing a uint8_t, right? What about some custom structs?
using namespace PacketBuffer;
struct MyPacket {
uint8_t id;
std::string name;
uint8_t age;
template<typename Packer>
void pack(Packer& packer) const { packer(id, name, age); }
template<typename Unpacker>
void unpack(Unpacker& unpacker) { unpacker(id, name, age); }
};
std::stringstream ss;
Packer<std::stringstream> packer(ss);
MyPacket packet;
packer.pack(packet);Seriously, that is it! You can now serialize and deserialize your structure on any machine with whatever byte order it has!