你如何在 JavaScript 中的不同基数之间转换数字?

新手上路,请多包涵

我想在不同的基数之间转换数字,例如十六进制和十进制。

示例: 如何将十六进制 8F 转换为十进制?

原文由 Yves 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 274
2 个回答

应用程序接口

要从十六进制字符串转换为数字:

 parseInt(string, radix)

  • 字符串:必填。要解析的字符串

  • 基数:可选。代表要使用的数字系统的数字(从 2 到 36)

要从数字转换为十六进制字符串:

 NumberObject.toString(radix)

  • 基数:可选。指定您希望数字显示为的基数。

示例基数值:

  • 2 - 该数字将显示为二进制值
  • 8 - 该数字将显示为八进制值
  • 16 - 该数字将显示为十六进制值

用法示例

整数值到十六进制:

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

十六进制字符串到整数值:

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

整数值转十进制:

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

原文由 aehlke 发布,翻译遵循 CC BY-SA 4.0 许可协议

我来到这篇文章需要从 base 10 转换为 62,反之亦然。虽然这里的解决方案很棒, parseInttoString 只支持 base 2 到 36。所以如果有人发现自己和我处于类似的位置需要 base 2 到 62,我已经粘贴了我的解决方案如下。

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

原文由 Ryan Smith 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏