以同样的方式,我们使用字符123456789abcdef
来获取十六进制的“数字”,您只需执行integer.toString(16)
即可将整数转换为十六进制:
> (16).toString(16)
'10'
...我想改用自定义字符集和自定义基数。因此,对于十六进制,我想使用字符13579acegikmoqsu
,那么将是这样的:
> (16).toString(16, '13579acegikmoqsu')
'ik'
实际上,我不知道在这种情况下的输出值是多少。但是我正在寻找如何用JavaScript做到这一点。
十六进制之外的另一个示例是,例如,使用字符集and123
将以6为基数的数字转换为字符串,因此将是这样的:
> (16).toString(6, 'and123')
'a3d'
我也不知道这里的值是什么,我也不知道如何计算它。基本上想知道如何在JavaScript中执行此操作,而不必使用此toString
API,最好是更底层,以便我也可以理解其背后的逻辑。
同样,知道如何反转它也很有帮助,因此可以像这个伪示例一样从a3d => 16
开始。
答案 0 :(得分:4)
您可以将整数值的字符值映射为索引
function toString(n, characters) {
var radix = characters.length;
return Array
.from(n.toString(radix), v => characters[parseInt(v, radix)])
.join('');
}
console.log(toString(16, '13579acegikmoqsu')); // 31
没有toString
和parseInt
的版本。
function toString(n, characters) {
var radix = characters.length,
temp = [];
do {
temp.unshift(n % radix);
n = Math.floor(n / radix);
} while (n)
return temp
.map(i => characters[i])
.join('');
}
console.log(toString(16, '13579acegikmoqsu')); // 31