limb 0.2.0

2024-01-09

u64_pack_trim(3)
limb manual
u64_pack_trim(3)

NAME

u64_pack_trim, u64_unpack_trim - store/read an u64 into/from a byte array

SYNOPSIS

#include <limb/u64.h>
int u64_pack_trim(char *dst, size_t dlen, u64 val)
int u64_unpack_trim(u64 *val, const char *sce, size_t slen)

DESCRIPTION

The u64_pack_trim() function will store the number val into the byte array pointed by dst of length dlen, trimming the "unneeded" bits, i.e. all most significant bits set to zero need not be included.

In other words, it will only use as many bytes as necessary: The value is stored in little-endian mode using only 7 bits per byte, with the last (most significant) bit used as indicator whether or not an additional byte is required.

Therefore the encoded number will take from only 1 up to 9 bytes.

The u64_unpack_trim() function performs the reverse, reading bytes from the memory pointed by sce to get the encoded value, which will be placed into the memory pointed by val.

It will therefore read from 1 up to 9 bytes, depending on the actual value. However it will only ever read up to slen bytes.

RETURN VALUE

The u64_pack_trim() function returns the number of bytes written to into dst to pack val on success. Otherwise - i.e. more than dlen bytes are necessary - it returns -1.

The u64_unpack_trim() function returns the number of bytes read from sce to unpack val on success. Otherwise - i.e. more than slen bytes were needed to be read - it returns -1.

SEE ALSO

u64_pack(3)

limb 0.1.0
2023-07-24
u64_pack_trim(3)