A python port for https://github.com/aseemk/bases.js
Utility for converting numbers to/from different bases/alphabets. Common bases have convenience aliases (see below), but arbitrary/custom alphabets can be used.
As most people have noticed pythons int()
only supports one way base conversions.
int('lol',36) // => 28101
. Pythons format()
also only supports conversion the other way up to base 16. This library was created to help those python programmers by providing a bases conversion system that works both ways, can use customized conversions and supports from base 2 all the way up to base 64 all in one library.
Python:
pip install bases.py
from bases import Bases
bases = Bases()
bases.toBase16(200) // => 'c8'
bases.toBase62(99999) // => 'q0T'
bases.toAlphabet(300, 'aAbBcC') // => 'Abba'
bases.fromBase16('c8') // => 200
bases.fromBase62('q0T') // => 99999
bases.fromAlphabet('Abba', 'aAbBcC') // => 300
Going from numbers to strings:
-
toAlphabet(num, alphabet)
: returns a string representation of the given number for the given alphabet, where the alphabet is an arbitrary string of characters. (See known alphabets below for examples.) -
toBase(num, base)
: convenience helper for known bases (see below). -
toBaseX(num)
: convenience helpers for known bases (see below), e.g.toBase62(num)
.
Going from strings to numbers:
-
fromAlphabet(str, alphabet)
: returns an integer representation of the given string for the given alphabet. -
fromBase(num, base)
: convenience helper for known bases. -
fromBaseX(str)
: convenience helpers for known bases.
Numbers only:
Base-2 | 01 |
... | 012... |
Base-10 | 0123456789 |
Letters only:
Base-26 | abcdefghijklmnopqrstuvwxyz |
Base-52 | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |
Alphanumeric:
Base-11 | 0123456789a |
... | 0123456789ab... |
Base-16 | 0123456789abcdef |
Base-36 | 0123456789abcdefghijklmnopqrstuvwxyz |
Base-62 | 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |
Human-friendly:
Base-32 (from Douglas Crockford) | 0123456789ABCDEFGHJKMNPQRSTVWXYZ (no IOLU ) |
Base-58 (from Flickr) | 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ (no 0lIO ) |
Other:
Base-64 (as standardized) | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ |
Base-64 warning: besides there being several different standards, padding isn't currently added and line lengths aren't tracked. Not recommended for use with APIs that expect formal base-64 strings!
MIT license. (c) 2015-2016 Belldandu and contributors.