diff options
| author | johannes <johannes.herman@gmail.com> | 2024-02-06 12:29:41 +0100 |
|---|---|---|
| committer | johannes <johannes.herman@gmail.com> | 2024-02-06 12:29:41 +0100 |
| commit | 0ab2c0afc6fd192f4008962ef400b92434e2dc2d (patch) | |
| tree | 31ff61e1945850048ac6b82f23cb428d62e0cb70 /src/pack.c | |
| parent | 1bdee2153953e23bf71f7a5e83145bb4d67db567 (diff) | |
added read snap and read tick
Diffstat (limited to 'src/pack.c')
| -rw-r--r-- | src/pack.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/pack.c b/src/pack.c new file mode 100644 index 0000000..f7be2c8 --- /dev/null +++ b/src/pack.c @@ -0,0 +1,35 @@ +#include <stdio.h> + +int readint(unsigned char **cp) +{ + int result = 0; + int len = 1; + + unsigned char src = **cp; + + (*cp)++; + int sign = (src >> 6) & 1; + + result |= (src & 0b00111111); + for (int i = 0; i < 4; i++) + { + // printf("(%d, ", src); + if ((src & 0b10000000) == 0) + break; + + src = **cp; + (*cp)++; + len++; + + if (i == 3 && (src & 0b11110000) != 0) + printf("[ WARNING ] Non zero int padding!\n"); + + result |= (src & 0b01111111) << (6 + 7 * i); + } + if (len > 1 && src == 0b00000000) + printf("[ WARNING ] Overlong int encoding!\n"); + + result ^= -sign; + + return result; +} |
