Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you convert numbers between different bases in JavaScript?

Tags:

javascript

I would like to convert numbers between different bases, such as hexadecimal and decimal.

Example: How do you convert hexadecimal 8F to decimal?

like image 473
Yves Avatar asked Aug 26 '09 20:08

Yves


People also ask

How do you convert base value?

How to convert from any base to any base. Convert from decimal to destination base: divide the decimal with the base until the quotient is 0 and calculate the remainder each time. The destination base digits are the calculated remainders.

How do you convert something to a number in JavaScript?

How to convert a string to a number in JavaScript using the parseInt() function. Another way to convert a string into a number is to use the parseInt() function. This function takes in a string and an optional radix. A radix is a number between 2 and 36 which represents the base in a numeral system.


2 Answers

The API

To convert to a number from a hex string:

parseInt(string, radix) 
  • string: Required. The string to be parsed

  • radix: Optional. A number (from 2 to 36) that represents the numeral system to be used

To convert from a number to a hex string:

NumberObject.toString(radix) 
  • radix: Optional. Specifies the base radix you would like the number displayed as.

Example radix values:

  • 2 - The number will show as a binary value
  • 8 - The number will show as an octal value
  • 16 - The number will show as an hexadecimal value

Example Usage

Integer value to hex:

var i = 10;  console.log( i.toString(16) );

Hex string to integer value:

var h = "a";  console.log( parseInt(h, 16) );

Integer value to decimal:

 var d = 16;   console.log( d.toString(10) );
like image 177
aehlke Avatar answered Sep 21 '22 23:09

aehlke


I came to this post needing to convert from base 10 to 62 and vice-versa. Whilst the solutions here are great, parseInt and toString only support base 2 to 36. So if anyone finds themselves in a similar position to me needing base 2 to 62, I've pasted my solution below.

https://gist.github.com/ryansmith94/91d7fd30710264affeb9

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';  }
like image 20
Ryan Smith Avatar answered Sep 18 '22 23:09

Ryan Smith