Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
43
Task/Variable-length-quantity/C/variable-length-quantity-1.c
Normal file
43
Task/Variable-length-quantity/C/variable-length-quantity-1.c
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void to_seq(uint64_t x, uint8_t *out)
|
||||
{
|
||||
int i, j;
|
||||
for (i = 9; i > 0; i--) {
|
||||
if (x & 127ULL << i * 7) break;
|
||||
}
|
||||
for (j = 0; j <= i; j++)
|
||||
out[j] = ((x >> ((i - j) * 7)) & 127) | 128;
|
||||
|
||||
out[i] ^= 128;
|
||||
}
|
||||
|
||||
uint64_t from_seq(uint8_t *in)
|
||||
{
|
||||
uint64_t r = 0;
|
||||
|
||||
do {
|
||||
r = (r << 7) | (uint64_t)(*in & 127);
|
||||
} while (*in++ & 128);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
uint8_t s[10];
|
||||
uint64_t x[] = { 0x7f, 0x4000, 0, 0x3ffffe, 0x1fffff, 0x200000, 0x3311a1234df31413ULL};
|
||||
|
||||
int i, j;
|
||||
for (j = 0; j < sizeof(x)/8; j++) {
|
||||
to_seq(x[j], s);
|
||||
printf("seq from %llx: [ ", x[j]);
|
||||
|
||||
i = 0;
|
||||
do { printf("%02x ", s[i]); } while ((s[i++] & 128));
|
||||
printf("] back: %llx\n", from_seq(s));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
seq from 7f: [ 7f ] back: 7f
|
||||
seq from 4000: [ 81 80 00 ] back: 4000
|
||||
seq from 0: [ 00 ] back: 0
|
||||
seq from 3ffffe: [ 81 ff ff 7e ] back: 3ffffe
|
||||
seq from 1fffff: [ ff ff 7f ] back: 1fffff
|
||||
seq from 200000: [ 81 80 80 00 ] back: 200000
|
||||
seq from 3311a1234df31413: [ b3 88 e8 a4 b4 ef cc a8 13 ] back: 3311a1234df31413
|
||||
Loading…
Add table
Add a link
Reference in a new issue