aeh*_*lke 92
API
要从十六进制字符串转换为数字:
parseInt(string, radix)
Run Code Online (Sandbox Code Playgroud)
string:必需.要解析的字符串
radix:可选.一个数字(从2到36)代表要使用的数字系统
要从数字转换为十六进制字符串:
NumberObject.toString(radix)
Run Code Online (Sandbox Code Playgroud)
示例基数值:
示例用法
十六进制的整数值:
var i = 10;
console.log( i.toString(16) );
Run Code Online (Sandbox Code Playgroud)
十六进制字符串到整数值:
var h = "a";
console.log( parseInt(h, 16) );
Run Code Online (Sandbox Code Playgroud)
整数值到十进制:
var d = 16;
console.log( d.toString(10) );
Run Code Online (Sandbox Code Playgroud)
Rya*_*ith 15
我来到这个帖子需要从基数10转换为62,反之亦然.虽然这里的解决方案很棒,parseInt
并且toString
只支持2到36的基础.所以,如果有人发现自己处于类似于我需要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';
}
Run Code Online (Sandbox Code Playgroud)
Sla*_*ser 12
您可以尝试以下代码,它也支持任意精度数字(大于2^53)。
function convertBase(str, fromBase, toBase) {
const DIGITS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/";
const add = (x, y, base) => {
let z = [];
const n = Math.max(x.length, y.length);
let carry = 0;
let i = 0;
while (i < n || carry) {
const xi = i < x.length ? x[i] : 0;
const yi = i < y.length ? y[i] : 0;
const zi = carry + xi + yi;
z.push(zi % base);
carry = Math.floor(zi / base);
i++;
}
return z;
}
const multiplyByNumber = (num, x, base) => {
if (num < 0) return null;
if (num == 0) return [];
let result = [];
let power = x;
while (true) {
num & 1 && (result = add(result, power, base));
num = num >> 1;
if (num === 0) break;
power = add(power, power, base);
}
return result;
}
const parseToDigitsArray = (str, base) => {
const digits = str.split('');
let arr = [];
for (let i = digits.length - 1; i >= 0; i--) {
const n = DIGITS.indexOf(digits[i])
if (n == -1) return null;
arr.push(n);
}
return arr;
}
const digits = parseToDigitsArray(str, fromBase);
if (digits === null) return null;
let outArray = [];
let power = [1];
for (let i = 0; i < digits.length; i++) {
digits[i] && (outArray = add(outArray, multiplyByNumber(digits[i], power, toBase), toBase));
power = multiplyByNumber(fromBase, power, toBase);
}
let out = '';
for (let i = outArray.length - 1; i >= 0; i--)
out += DIGITS[outArray[i]];
return out;
}
Run Code Online (Sandbox Code Playgroud)
用法:
console.log(convertBase("5a2a9c826c75045be9ba8fbffc80c6f25a2a9c826c75045be9ba8fbffc80c6f2",16,64));
// Returns: 5EGD89ItghrWrGfL/O0NL9qaFO2r7k4m+CWzX/YwcrO
console.log(convertBase("5EGD89ItghrWrGfL/O0NL9qaFO2r7k4m+CWzX/YwcrO",64,16));
// Returns: 5a2a9c826c75045be9ba8fbffc80c6f25a2a9c826c75045be9ba8fbffc80c6f2
Run Code Online (Sandbox Code Playgroud)
基本代码可以在这里找到,我对其进行了一些改进,以支持最高 64 位。
指定要用作参数的基数.
注意:这仅适用于从基数2-36转换为十进制和小值.
parseInt(string, radix)
parseInt("80", 10) // results in 80
parseInt("80", 16) // results in 128
// etc
Run Code Online (Sandbox Code Playgroud)
关于"小",parseInt("6f", 32)
是好的(= 207),
但其他大一点也将是207, 6f1
,6f11
,...
此函数生成从 2 到 36 的任何基数的十进制数。(就像 javascript)
但是您可以通过添加新字符来将基数增加到 36以上,keys[]
例如小写 ["a","b"]
function toBase(num, radix = 10) { // only i64 numbers
var keys = ['', '', 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
if (!(radix >= 2 && radix <= keys.length)) throw new RangeError("toBase() radix argument must be between 2 and " + keys.length)
if (num < 0) var isNegative = true
if (isNaN(num = Math.abs(+num))) return NaN
let output = [];
do {
let index = num % radix;
output.unshift(keys[index]);
num = Math.trunc(num / radix);
} while (num != 0);
if (isNegative) output.unshift('-')
return output.join("");
}
console.log(toBase("100",2))
Run Code Online (Sandbox Code Playgroud)
小智 7
好吧,我做了一个可以从基数10翻译到任何基数的函数.(这取决于你在数组中有多少个字符串A
,如果它超过+ 10,它将用完符号),当我发现你可以用不到10个字符时,我几乎哭了.. .
添加一个书签,并作为URL插入此...我已经完成了很长但个性化的方式.至少,我可以使用高于36的基础.您可以自己添加更多符号,但如果您愿意,我可以为您制作...
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", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
var B = function() {
for (i = X; 0 < i; i = Math.floor(i / Y)) {
if(i % Y >= 10) {
Z.push(A[i % Y - 10]);
} else {
Z.push(i % Y);
}
M = M + 1;
}
for (j = M; j >= 0; j--) {
document.write(Z[j]);
}
};
B(); // Call function
Run Code Online (Sandbox Code Playgroud)
通常我使用此功能从不同的基础转换.
例如,它为两种情况返回"11111111": convertBase("ff",16,2 )或convertBase(0xFF,16,2)
var convertBase = function(val, base1, base2) {
if (typeof(val) == "number") {
return parseInt(String(val)).toString(base2);
} else {
return parseInt(val.toString(), base1).toString(base2)
};
}
Run Code Online (Sandbox Code Playgroud)