Blob
1 #include <lib9.h>2 static char t16e[] = "0123456789ABCDEF";4 int5 dec16(uchar *out, int lim, char *in, int n)6 {7 int c, w = 0, i = 0;8 uchar *start = out;9 uchar *eout = out + lim;11 while(n-- > 0){12 c = *in++;13 if('0' <= c && c <= '9')14 c = c - '0';15 else if('a' <= c && c <= 'z')16 c = c - 'a' + 10;17 else if('A' <= c && c <= 'Z')18 c = c - 'A' + 10;19 else20 continue;21 w = (w<<4) + c;22 i++;23 if(i == 2){24 if(out + 1 > eout)25 goto exhausted;26 *out++ = w;27 w = 0;28 i = 0;29 }30 }31 exhausted:32 return out - start;33 }35 int36 enc16(char *out, int lim, uchar *in, int n)37 {38 uint c;39 char *eout = out + lim;40 char *start = out;42 while(n-- > 0){43 c = *in++;44 if(out + 2 >= eout)45 goto exhausted;46 *out++ = t16e[c>>4];47 *out++ = t16e[c&0xf];48 }49 exhausted:50 *out = 0;51 return out - start;52 }