diff options
| author | bhgv <bhgv.empire@gmail.com> | 2018-03-01 16:54:45 +0200 |
|---|---|---|
| committer | bhgv <bhgv.empire@gmail.com> | 2018-03-01 16:54:45 +0200 |
| commit | b786f20bbab5a59046aa78a2c6c2a11536497202 (patch) | |
| tree | 0851ecdec889eb9b7ba3751cc04d4f0b474e4a9e /appl/lib/encoding/base16.b | |
inferno-os tree was separated from the inferno-os-android (separated from the Android driver)
Diffstat (limited to 'appl/lib/encoding/base16.b')
| -rw-r--r-- | appl/lib/encoding/base16.b | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/appl/lib/encoding/base16.b b/appl/lib/encoding/base16.b new file mode 100644 index 0000000..6c91c20 --- /dev/null +++ b/appl/lib/encoding/base16.b @@ -0,0 +1,43 @@ +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]; +} |
