12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #include <lib9.h>
- static char t16e[] = "0123456789ABCDEF";
- int
- dec16(uchar *out, int lim, char *in, int n)
- {
- int c, w = 0, i = 0;
- uchar *start = out;
- uchar *eout = out + lim;
- while(n-- > 0){
- c = *in++;
- if('0' <= c && c <= '9')
- c = c - '0';
- else if('a' <= c && c <= 'z')
- c = c - 'a' + 10;
- else if('A' <= c && c <= 'Z')
- c = c - 'A' + 10;
- else
- continue;
- w = (w<<4) + c;
- i++;
- if(i == 2){
- if(out + 1 > eout)
- goto exhausted;
- *out++ = w;
- w = 0;
- i = 0;
- }
- }
- exhausted:
- return out - start;
- }
- int
- enc16(char *out, int lim, uchar *in, int n)
- {
- uint c;
- char *eout = out + lim;
- char *start = out;
- while(n-- > 0){
- c = *in++;
- if(out + 2 >= eout)
- goto exhausted;
- *out++ = t16e[c>>4];
- *out++ = t16e[c&0xf];
- }
- exhausted:
- *out = 0;
- return out - start;
- }
|