diff options
author | Vladimir Azarov <avm@intermediate-node.net> | 2024-10-01 15:47:05 +0200 |
---|---|---|
committer | Vladimir Azarov <avm@intermediate-node.net> | 2024-10-01 15:47:05 +0200 |
commit | 4abab5ad6c8465a7528ccdd5f49367da05f78bbd (patch) | |
tree | ebf009bf1376a5a223a915bc27cbbd791a1316bc /src/misc/a64l.c |
Initial version
Diffstat (limited to 'src/misc/a64l.c')
-rw-r--r-- | src/misc/a64l.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/misc/a64l.c b/src/misc/a64l.c new file mode 100644 index 0000000..6055771 --- /dev/null +++ b/src/misc/a64l.c @@ -0,0 +1,29 @@ +#include <stdlib.h> +#include <string.h> +#include <stdint.h> + +static const char digits[] = + "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +long a64l(const char *s) +{ + int e; + uint32_t x = 0; + for (e=0; e<36 && *s; e+=6, s++) { + const char *d = strchr(digits, *s); + if (!d) break; + x |= (uint32_t)(d-digits)<<e; + } + return (int32_t)x; +} + +char *l64a(long x0) +{ + static char s[7]; + char *p; + uint32_t x = x0; + for (p=s; x; p++, x>>=6) + *p = digits[x&63]; + *p = 0; + return s; +} |