Skip to content

Instantly share code, notes, and snippets.

@ryasmi
Last active August 11, 2023 10:07
Show Gist options
  • Save ryasmi/91d7fd30710264affeb9 to your computer and use it in GitHub Desktop.
Save ryasmi/91d7fd30710264affeb9 to your computer and use it in GitHub Desktop.
Moved to https://github.com/ryasmi/baseroo - Converts a number represented as a string from one base to another (up to 64).
function convertBase(value, from_base, to_base) {
var range = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'.split('');
var from_range = range.slice(0, from_base);
var to_range = range.slice(0, to_base);
var dec_value = value.split('').reverse().reduce(function (carry, digit, index) {
if (from_range.indexOf(digit) === -1) throw new Error('Invalid digit `'+digit+'` for base '+from_base+'.');
return carry += from_range.indexOf(digit) * (Math.pow(from_base, index));
}, 0);
var new_value = '';
while (dec_value > 0) {
new_value = to_range[dec_value % to_base] + new_value;
dec_value = (dec_value - (dec_value % to_base)) / to_base;
}
return new_value || '0';
}
@ryasmi
Copy link
Author

ryasmi commented Jan 5, 2023

@kzar79 @Juraj-Masiar @crispy-cat @apanasara @joeshae @zakariamouhid @c0ncentus

I moved this code to https://github.com/ryansmith94/baseroo and created issue #1 today and fixed the bug with large numbers. Thanks to @zakariamouhid for the suggested fix, I utilised that and tweaked it to work with TypeScript. Apologies for my slow reply, seemed I had notifications turned off for replies until recently, so thanks to @c0ncentus for persisting with that latest comment which did come through 👍

@ryasmi
Copy link
Author

ryasmi commented Jan 28, 2023

Now supports floats ryasmi/baseroo#37

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment