ENCODE(2) ENCODE(2) NAME dec64, enc64, dec32, enc32, dec16, enc16, dec64x, enc64x, dec32x, enc32x, dec64chr, enc64chr, dec32chr, enc32chr, dec16chr, enc16chr, encodefmt - encoding byte arrays as strings SYNOPSIS #include <u.h> #include <libc.h> int dec64(uchar *out, int lim, char *in, int n) int dec64x(uchar *out, int lim, char *in, int n, int (*map)(int)) int enc64(char *out, int lim, uchar *in, int n) int enc64x(char *out, int lim, uchar *in, int n, int (*map)(int)) int dec32(uchar *out, int lim, char *in, int n) int dec32x(uchar *out, int lim, char *in, int n, int (*map)(int)) int enc32(char *out, int lim, uchar *in, int n) int enc32x(char *out, int lim, uchar *in, int n, int (*map)(int)) int dec16(uchar *out, int lim, char *in, int n) int enc16(char *out, int lim, uchar *in, int n) int dec64chr(int c) int enc64chr(int o) int dec32chr(int c) int enc32chr(int o) int dec16chr(int c) int enc16chr(int o) int encodefmt(Fmt*) DESCRIPTION The functions described here handle encoding and decoding of Page 1 Plan 9 (printed 12/22/24) ENCODE(2) ENCODE(2) bytes to printable ASCII strings as specified by RFC4648. Enc16, enc32 and enc64 create null terminated strings. They return the size of the encoded string (without the null) or -1 if the encoding fails. The encoding fails if lim, the length of the output buffer (including null), is too small. Dec16, dec32 and dec64 return the number of bytes decoded or -1 if the decoding fails. The decoding fails if the output buffer is not large enough or, for base 32, if the input buffer length is not a multiple of 8. Dec16chr, dec32chr and dec64chr return the value for a sym- bol of the alphabet or -1 when the symbol is not in the alphabet. Enc16chr, enc32chr and enc64chr encode a symbol of the alphabet given a value. if the value is out of range then zero is returned. The enc64x and enc32x variants are identical to the above, except that they take a function mapping from an arbitrary index in the alphabet to the encoded character. For exam- ple, in the following 32-character alphabet, ABCDEFGHIJKLMNOPQRSTUVWXYZ234567 the chr function would map the value 3 to the character D. The dec64x and dec32x variants are similar to the above, however the function passed maps from a character within the alphabet to the index within the alphabet. Encodefmt can be used with fmtinstall(2) and print(2) to print encoded representations of byte arrays. The verbs are H base 16 (i.e. hexadecimal). The default encoding is in upper case. The l flag forces lower case. < base 32. The default is upper case, same as H. [ base 64 (same as MIME) The length of the array is specified as f2. For example, to display a 15 byte array as hex: char x[15]; fmtinstall('H', encodefmt); print("%.*H\n", sizeof x, x); SOURCE Page 2 Plan 9 (printed 12/22/24) ENCODE(2) ENCODE(2) /sys/src/libc/port/u16.c /sys/src/libc/port/u32.c /sys/src/libc/port/u64.c /sys/src/libc/port/encodefmt.c HISTORY In Jan 2018, base 32 encoding was changed from non-standard to standard RFC4648 alphabet. old: 23456789abcdefghijkmnpqrstuvwxyz new: ABCDEFGHIJKLMNOPQRSTUVWXYZ234567 Page 3 Plan 9 (printed 12/22/24)