资讯专栏INFORMATION COLUMN

用javascript自己写一个进制转换小工具

fobnn / 3189人阅读

摘要:进制转换本身自带进制转换功能,支持进制的转换注意,不能直接使用因为数字后面小数点后面会被识别成小数点的点将十进制的转换成进制,结果是将进制的转换成进制,结果是将十进制的转换成进制,结果是将进制的转换成进制,结果是将十进制的转换成进制,结果

JavaScript进制转换 JavaScript本身自带进制转换功能,支持2-36进制的转换

// 注意,不能直接使用 11.toString(16); 因为数字后面小数点后面会被识别成小数点的点
Number(11).toString(16); // 将十进制的11转换成16进制,结果是b
parseInt("b", 16); // 将16进制的b转换成10进制,结果是11

Number(38).toString(36); // 将十进制的38转换成36进制,结果是12
parseInt(12, 36); // 将36进制的12转换成10进制,结果是38

Number(27).toString(2); // 将十进制的27转换成2进制,结果是11011
parseInt("11011", 2); 、// 将二进制的11011转换成10进制,结果是27

但是如果要写超过36进制的进制转换,js就不支持了 自己写了一个进制转换工具,可自定义字符对应关系
/**
 * 十进制和其他进制的相互转换
 */
class MyNumberConvertion {
    constructor(chars) {
        this.chars = chars;
        this.RADIX = chars.length;
        this.map = new Map();
        for (let i = 0; i < this.RADIX; i++) {
            let c = chars[i];
            this.map.set(c, i);
        }
    }

    /**
     * 将十进制数字转换成指定进制
     * @param {Number, String} num 
     */
    transfer(num) {
        let a = +num; //把字符串变成数字
        let arr = [];
        if (a === 0) {
            arr.push("0");
        }
        const RADIX = this.RADIX;
        while (a > 0) {
            let tmp = a % RADIX;
            let c = this.chars[tmp];
            arr.unshift(c);
            a = parseInt(a / RADIX);
        }
        return arr.join("");
    }

    /**
     * 将字符串还原成指定进制
     * @param {String} str 
     */
    revert(str) {
        str = str + "";
        str = str.trim();
        let num = 0;
        let len = str.length;
        let RADIX = this.RADIX;
        for (let i = 0; i < len; i++) {
            let s = str[i];
            let a = this.map.get(str[i]);
            num += a * Math.pow(RADIX, len - i - 1);
        }
        return num;
    }
}

示例如下:

console.log("64进制");
// //初始化的字符串,字符串长度就是进制,从左到右,0对应数值0,最后一个字符~对应数值63
const chars64 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-~";
// //初始化转换器
const convertion64 = new MyNumberConvertion(chars64);
let str64 = "445306828";
let num64 = convertion64.transfer(str64);//将数字转换成64进制
let source64 = convertion64.revert(num64);//将64进制字符还原成原始数据
console.log(`原始数据:${str64}`);
console.log(`转换后:${num64}`)
console.log(`还原后:${source64}`);

console.log("2进制");
const convertion2 = new MyNumberConvertion("01");
let str2 = 15;
let num2 = convertion2.transfer(str2);
let source2 = convertion2.revert(num2);
console.log(`原始数据:${str2}`);
console.log(`转换后:${num2}`)
console.log(`还原后:${source2}`);

console.log("8进制");
const convertion8 = new MyNumberConvertion("01234567");
let str8 = 39;
let num8 = convertion8.transfer(str8);
let source8 = convertion8.revert(num8);
console.log(`原始数据:${str8}`);
console.log(`转换后:${num8}`)
console.log(`还原后:${source8}`);

进制转换小工具

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104689.html

相关文章

  • 爬虫不得不学之 JavaScript 入门篇

    摘要:为数值固定的表示法,用来表示整数和浮点数的。无论你写何种进制,它的存储还是以二进制来存储的,所以这样就弄成了浮点数的存储精确度,浮点数只能精确到位小数。关系运算符关系运算符有和。赋值运算符赋值运算符有六个。 现在的爬虫越来越难了,不再和之前的那样,随便抓个包就可以找到相关的 url ,然后 post 一下或者 get 一下数据就出来了。还有一个可能就是可能你以前用来学习的爬虫网站太简单...

    tracymac7 评论0 收藏0
  • 「干货」细说 Javascript 中的浮点数精度丢失问题(内附好课推荐)

    摘要:前言最近,朋友问了我这样一个问题在中的运算结果,为什么是这样的虽然我告诉他说,这是由于浮点数精度问题导致的。由于可以用阶码移动小数点,因此称为浮点数。它的实现遵循标准,使用位精度来表示浮点数。 showImg(https://segmentfault.com/img/remote/1460000018981071); 前言 最近,朋友 L 问了我这样一个问题:在 chrome 中的运算...

    senntyou 评论0 收藏0
  • 你不知道的JavaScript中卷 第一、二章

    摘要:表达式没有返回值,因此返回结果是。并不改变表达式的结果,只要让表达式不返回值按惯例我们用来获得这主要源自语言,当然使用或其他表达式也是可以的。不是数字的数字如果数学运算的操作数不是数字类型,就无法返回一个有效的数字,这种情况下返回值为。 这里的内容是读书笔记,仅供自己学习所用,有欠缺的地方欢迎留言提示。 第一部分 类型和语法 第1章 类型ECMAScript语言类型包括Undefin...

    levy9527 评论0 收藏0
  • JavaScript值介绍

    摘要:的数字类型是基于标准实现的,该标准也被称为浮点数使用的是双精度即位进制由于数字值可以使用对象进行封装,因此数字值可以调用中的方法。 数组 和其他语言不同,在JavaScript中,数组可以拥有不同值类型,可以使字符串,数字,对象,还可以是数组(多维数组就是这样形成的). 声明数组后,可以直接通过索引的方式进行赋值: var arr = []; arr.length; //0 ...

    hsluoyz 评论0 收藏0
  • 高质量JavaScript代码的基本技巧

    摘要:五不要增加内置的原型增加内置构造函数如,和等的原型属性是一个增强功能性的强大的方法,但这可能会严重影响可维护性,因为这种做法将使代码变得更加不可预测。推荐使用后者,这样根据名字就能明显地区分出变量函数和基本常量等。 一、尽量少用全局变量 减少全局名字空间污染,最理想的情况是一个应用程序仅有一个全局变量。 二、单一var模式 var a = 1, b = 2, sum =...

    Alex 评论0 收藏0

发表评论

0条评论

fobnn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<