CppSerdes  1.0
A serialization/deserialization library designed with embedded systems in mind
06_variable_length_formats.cpp

This example demonstrates how to define a variable sized array in a format

#include "../include/bitprint.h"
#include "../include/serdes.h"
struct my_info : serdes::packet_base
{
uint8_t length = 0;
uint8_t data[10] = {};
uint8_t bit_flags = 0;
{
// here the number of elements in the "data" array changes based on the length field
// as well as the number of bits in the "bit_flags" field
p + length + serdes::array(data, length) + serdes::bitpack(bit_flags, length);
}
};
int main()
{
uint16_t serial_data[4] = {};
{ // storing some info according to the predefined format
my_info object;
object.length = 3;
object.data[0] = 0xAB;
object.data[1] = 0xCD;
object.data[2] = 0xEF;
object.bit_flags = 0xFF;
object.store(serial_data);
serdes::printhex(serial_data);
}
{ // using the same format to load the data back into a new object
my_info new_object;
new_object.load(serial_data);
printf("recovered data = [%u]{0x%X, 0x%X, 0x%X}\n\n",
new_object.length, new_object.data[0], new_object.data[1], new_object.data[2]);
printf("only %u flags recovered = ", new_object.length);
serdes::printbin(new_object.bit_flags);
}
}
serdes::printhex
void printhex(const uint8_t data, const bool add_newline=true)
prints uint8_t value in hex format
Definition: bitprint.h:81
serdes::bitpack
bitpack a value into an exact number of specified bits. If applied to an array it will be applied to ...
Definition: serdes_format_modifiers.h:54
serdes::printbin
void printbin(const T(&data)[N], const bool add_newline=true)
prints an array in binary format
Definition: bitprint.h:255
serdes::packet
a serialization/deserialization helper class, with load, store, and stream operators
Definition: serdes.h:54
serdes::array
a container for fixed or dynamically sized arrays, with an upper bounds limit for safety
Definition: serdes_format_modifiers.h:87
serdes::packet_base
inheritable base class to allow format recording and application with no additional memory storage (e...
Definition: serdes_fwd_declarations.h:45
serdes::packet_base::format
virtual void format(packet &)=0
override to declare the serdes process used in store() and load()