ref: babf901b4a508c3ec5d1f89655f10377bbdf9637
dir: /appl/lib/encoding/base16.b/
implement Encoding;
include "encoding.m";
hex: con "0123456789ABCDEF";
enc(a: array of byte): string
{
o: string;
for(i := 0; i < len a; i++){
n := int a[i];
o[len o] = hex[n>>4];
o[len o] = hex[n & 16rF];
}
return o;
}
dec(s: string): array of byte
{
a := array[(len s+1)/2] of byte; # upper bound
o := 0;
j := 0;
n := 0;
for(i := 0; i < len s; i++){
c := s[i];
n <<= 4;
case c {
'0' to '9' =>
n |= c-'0';
'A' to 'F' =>
n |= c-'A'+10;
'a' to 'f' =>
n |= c-'a'+10;
* =>
continue;
}
if(++j == 2){
a[o++] = byte n;
j = n = 0;
}
}
return a[0:o];
}