base32

The base32 library provides predicates for encoding and decoding data in the Base32 format as per the specification found at:

https://www.rfc-editor.org/rfc/rfc4648

API documentation

Open the ../../apis/library_index.html#base32 link in a web browser.

Loading

To load all entities in this library, load the loader.lgt utility file:

| ?- logtalk_load(base32(loader)).

Testing

To test this library predicates, load the tester.lgt file:

| ?- logtalk_load(base32(tester)).

Encoding

Encoding a list of bytes in Base32 format is accomplished by the base32::generate/2 predicate. For example:

| ?- atom_codes('Hello!', Bytes),
     base32::generate(atom(Base32), Bytes).
Base32 = 'JBSWY3DPEE======'
Bytes = [72,101,108,108,111,33]
yes

| ?- atom_codes('Hello!', Bytes),
     base32::generate(codes(Base32), Bytes).
Base32 = [74,66,83,87,89,51,68,80,69,69,61,61,61,61,61,61]
Bytes = [72,101,108,108,111,33]
yes

The Base32 result can also be represented using a list of chars, written to a file or to a stream. See the API documentation for details.

Decoding

Decoding of Base32 data is accomplished using the base32::parse/2 predicate. For example:

| ?- base32::parse(atom('JBSWY3DPEE======'), Bytes),
     atom_codes(Atom, Bytes).
Atom = 'Hello!'
Bytes = [72,101,108,108,111,33]
yes

| ?- base32::parse(chars(['J','B','S','W','Y','3','D','P','E','E','=','=','=','=','=','=']), Bytes),
     atom_codes(Atom, Bytes).
Atom = 'Hello!'
Bytes = [72,101,108,108,111,33]
yes

The base32::parse/2 predicate accepts other input sources such as a file or a stream. See the API documentation for details. Both uppercase and lowercase letters are accepted when decoding.