https://github.com/javiercejudo/base-conversion
Convert between arbitrary bases
https://github.com/javiercejudo/base-conversion
base base-conversion conversion radix
Last synced: 2 months ago
JSON representation
Convert between arbitrary bases
- Host: GitHub
- URL: https://github.com/javiercejudo/base-conversion
- Owner: javiercejudo
- License: mit
- Created: 2016-02-14T04:11:17.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-01-27T08:45:22.000Z (over 8 years ago)
- Last Synced: 2025-02-13T20:31:03.762Z (4 months ago)
- Topics: base, base-conversion, conversion, radix
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/base-conversion
- Size: 29.3 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 28
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# base-conversion
[](https://travis-ci.org/javiercejudo/base-conversion)
[](https://coveralls.io/r/javiercejudo/base-conversion?branch=master)
[](https://codeclimate.com/github/javiercejudo/base-conversion)Auto-curried converter between any bases with arbitrary precision support and customisable symbols
## Install
npm i base-conversion
## Basic usage
```js
var bc = require('base-conversion');
var hexToBin = bc(16, 2);hexToBin('A'); //=> '1010'
hexToBin('1E'); //=> '11110'
```See [spec](test/spec.js).
## Custom symbols
For any bases above 62, custom symbols are required.
See [tests](test/bigint-base-converter.js) for working examples.```js
var bc = require('base-conversion');bc.symbols('⓿①②③④⑤⑥⑦⑧⑨ⒶⒷ', 8, 12, '⑦③'); //=> '④Ⓑ'
```## Symbol translation
To convert between different sets of symbols, use `bc.translate`:
```js
var bc = require('base-conversion');
var pipe = require('ramda/src/pipe');var hexToDuoNormal = bc(16, 12);
var hexToDuoCustom = pipe(hexToDuo, bc.translate('0123456789ᘔƐ'));hexToDuoNormal('10B'); // => '1A3'
hexToDuoCustom('10B'); // => '1ᘔ3'
```To use it to translate from custom symbols, use `bc.translateRaw`:
```js
var mySymbols = '⓿①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮';
var myTranslate = bc.translateRaw(mySymbols);var hexToDuoFancy = bc.symbols(mySymbols, 16, 12);
var hexToDuoCustom = pipe(hexToDuoFancy, myTranslate('0123456789ᘔƐ'));hexToDuoFancy('①⓿⑪'); //=> '①⑩③'
hexToDuoCustom('①⓿⑪'); //=> '1ᘔ3'
```## Arbitrary precision
```js
var bc = require('base-conversion');
var Big = require('arbitrary-precision')(require('bigjs-adapter'));
var toBigFactory = require('to-decimal-arbitrary-precision');var d = toBigFactory(Big);
// avoid large numbers to go into exponential notation (adapter dependent)
Big.Impl.E_POS = 50;bc.big(d, 10, 9, '5678364565345634563456346757364563534534645745');
//=> '802531310452364303450750087576673257456135727727'// equivalent but it skips a trivial decimal to decimal conversion
bc.fromDecimal.big(d, 9, '5678364565345634563456346757364563534534645745');
//=> '802531310452364303450750087576673257456135727727'
```## Full raw version
```js
var bc = require('base-conversion');
var Big = require('arbitrary-precision')(require('bigjs-adapter'));
var toBigFactory = require('to-decimal-arbitrary-precision');var d = toBigFactory(Big);
// avoid large numbers to go into exponential notation (adapter dependent)
Big.Impl.E_POS = 50;bc.raw(d, '01234#6789', 10, 9, '#678364#6#34#634#634#63467#7364#63#34#3464#74#');
//=> '802#313104#23643034#07#0087#766732#74#613#727727'// equivalent
bc.fromDecimal.raw(d, '01234#6789', 9, '#678364#6#34#634#634#63467#7364#63#34#3464#74#');
//=> '802#313104#23643034#07#0087#766732#74#613#727727'
```## Defaults
The default symbols and big implementation are exposed as follows:
```js
bc.defaultSymbols; //=> '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
bc.defaultB; //=> default arbitrary precision implementation (plus, times, div, mod & pow)
```