13size_t quic_varint_len(uint64_t value)
19 if (value <= 0x3FFFFFFF)
21 if (value <= QUIC_VARINT_MAX)
26size_t quic_varint_encode(uint8_t *out,
size_t cap, uint64_t value)
28 size_t n = quic_varint_len(value);
29 if (n == 0 || cap < n)
32 static const uint8_t prefix[9] = {0, 0x00, 0x40, 0, 0x80, 0, 0, 0, 0xC0};
33 for (
size_t i = 0; i < n; i++)
34 out[n - 1 - i] = (uint8_t)(value >> (8 * i));
39bool quic_varint_decode(
const uint8_t *in,
size_t len, uint64_t *value,
size_t *consumed)
43 size_t n = (size_t)1 << (in[0] >> 6);
46 uint64_t v = (uint64_t)(in[0] & 0x3F);
47 for (
size_t i = 1; i < n; i++)
QUIC variable-length integer coding (RFC 9000 sec 16).