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::array
T[S]
(statically sized arrays)std::chrono::duration
std::chrono::time_point
std::vector
std::map
std::unordered_map
std::list
std::set
std::unoredered_set
std::string
std::tuple
std::pair
std::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!