How do you convert numbers between different bases in JavaScript?

匿名 (未验证) 提交于 2019-12-03 02:08:02

问题:

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

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

回答1:

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:

>>> i = 10; 10 >>> i.toString(16); "a"

Hex string to integer value:

>>> h = "a"; "a" >>> parseInt(h, 16); 10

Integer value to decimal:

>>> d = 16; 16 >>> d.toString(10); "16"


回答2:

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'; }



回答3:

Specify the radix you want to use as a parameter.

NOTE: This only works to convert from bases 2-36 to decimal.

parseInt(string, radix)   parseInt("80", 10) // results in 80 parseInt("80", 16) // results in 128 // etc


回答4:

Well, I made a function that could translate from base 10 to any base. (This depends on how many strings you have in the array A, if it's more than that + 10 it'll run out of symbols), and I almost cried when I found out you could to it in less than 10 characters with that...

Add a bookmark and as URL insert this... I've done it the long but personal way. At least, mine can use a base which is higher than 36. You can add more symbols yourself, but if you want, I can make it for you...

var X = prompt("Choose your number"); var Y = prompt("Choose your base"); var Z = []; var M = -1; var A = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O"        
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!