JS万能进制数与十进制之间转换 2进制、16进制、26进制、62进制等
生活随笔
收集整理的這篇文章主要介紹了
JS万能进制数与十进制之间转换 2进制、16进制、26进制、62进制等
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有些時候我們需要自定義進制數,實現縮短數字長度、加密算法等,本文基于JavaScript語言實現了一套互轉方案,支持N進制
我們知道N進制就是使用N個字符來表示不同值
本文示例為數字+大小寫字母,共62個字符,實現的62進制,在實際使用時可改變字符串長度實現不同進制
代碼如下:
/62進制字符
const base = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
const ben = base.length;
function toBase(num) {
let arr = [];
while (num > 0) {
arr.push(base[num % ben]);
num = Math.floor(num / ben);
}
//數組反轉,因為個位在索引0的位置,應反過來顯示
return arr.reverse().join('');
}
function to10(baseNum) {
baseNum = baseNum.split('').reverse().join('');
let val = 0;
for (let i = 0; i < baseNum.length; i++) {
let c = baseNum[i];
val += (base.indexOf(c) * Math.pow(ben, i));
}
return val;
}
* 以上代碼首先定義了進制類型,即該進制使用到的所有字符,并提供兩個方法從十進制之間轉換及轉換為十進制
編寫測試代碼:
function test(val) {
console.log('十進制:' + val);
let str = toBase(val);
console.log(ben + '進制:' + str);
console.log('轉回十進制:' + to10(str));
console.log('
')
}
(function () {
test(11);
test(62);
test(999);
test(Date.now());
})();
運行結果為:
我們可以改變進制進行測試,如常用的
16進制:
const base = '0123456789ABCDEF';
2進制:
const base = '01';
加上各種字符組成83進制:
const base = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+=-<>,./?';
致讀者:感謝你閱讀本文,請隨手點擊右下角的推薦或分享,謝謝!
總結
以上是生活随笔為你收集整理的JS万能进制数与十进制之间转换 2进制、16进制、26进制、62进制等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zxing 扫码第三方SDK版本不兼容问
- 下一篇: SAP Spartacus和Table相