Description

The MsgPackBinary class allows you to read or write MessagePack binary data.

This feature was added in ArduinoJson 7.1.0.

Internally, MsgPackBinary uses the same storage as serialized() values.

Constructors

MsgPackBinary(const void* data, size_t size);

Member functions

const void* data() const;
size_t size() const;

Example

Serialization

char buffer[] = {1, 2, 3};

JsonDocument doc;
doc['data'] = MsgPackBinary(buffer, sizeof(buffer));
serializeMsgPack(doc, output);   // 81 A4 65 61 74 61 C4 03 01 02 03

MsgPackBinary doesn’t hold a copy of the data; it only stores a pointer and a size. Therefore, you must ensure the buffer remains valid until you insert it into a JsonDocument (where it will be copied).

Deserialization

JsonDocument doc;
deserializeMsgPack(doc, input);

MsgPackBinary data = doc['data'];
// or: auto data = doc['data'].as<MsgPackBinary>();

const void* buffer = data.data();
size_t size = data.size();

MsgPackBinary doesn’t hold a copy of the data; it only stores a pointer and a size. Therefore, you must ensure the JsonDocument remains valid as long as the MsgPackBinary object is in use.

Size restrictions

JsonDocument stores the size of the binary data in an integer whose width is determined by ARDUINOJSON_STRING_LENGTH_SIZE.

With the default settings, the maximum size of the binary data is:

CPU architecture Max binary size
8-bit 253
32-bit 65,632
64-bit 65,632

See also