Instead of #106, an alternative approach might be to allocate the payload buffer directly, and do the conversion by extracting a Span<byte> object representing the target memory locations to be used for writing data.
In this case we would directly allocate an empty payload with fixed length, and then use GetPayload to obtain an ArraySegment<byte> object which is implicitly convertible to Span<byte>.
The main difficulty here is how best to ensure Checksum is kept up to date.