crockford-b32
v1.0.1
Published
Crockford flavored base 32 encoding and decoding
Downloads
2
Readme
crockford-b32
Here is an implementation of Douglas Crockford's base-32 encoding in pure JavaScript.
Use
const cb32 = require('crockford-b32');
// Encoding
cb32.enc(24058); // Works with a number
// => 'QFT'
cb32.enc('hello world'); // Works with a string
// => '38CNP6RVS0EXQQ4V34'
// Parsing
cb32.parse('qft', 'number'); // Case doesn't matter
// => 24058
cb32.parse('38c-Np6R-vs0EXQ-Q4V34', 'string'); // It can handle hyphens and mixed case
// => 'hello world'
cb32.parse('64Ti-G6oT-208Lo', 'string'); // It can understand L or i in place of 1 and o in place of 0 (case insensitive);
// => 'bh004 '
cb32.parse('Q-ft'); // It defaults to returning a Node.js Buffer
// => <Buffer 5d fa>
Decisions, decisions...
Endianness
It's big. All big, all left-to-right. Deal with it.
Zero-extending
Papa Crockford tells us that "[i]f the bit-length of the number to be encoded is not a multiple of 5 bits, then zero-extend the number to make its bit-length a multiple of 5." I've understood this to mean that the number should be esssentially "left-padded" with zeroes to leave its value unchanged. Unfortunately, Papa Crockford is silent when it comes to string and other values.
For example, let's encode the character c
. Converting c
to an ASCII value gives us the decimal value 99
and the binary value 011 00011
. I have chosen to, in this circumstance, add two zeroes to the leading group of three to give us 00011 00011
encoded as 33
.