使用JavaScript将大的基数62值转换为基数16
Converting a large base 62 value to base 16 with JavaScript
我需要使用JavaScript将基数62的值(如4u8LPK581OHn7kRqRqP9ks)转换为基数16。使用基于php的工具,我可以看到结果应该是A12D08BC6D93BC4E8EA847434C960416。
看到一些像base62这样的npm结节,我想我可以把值取到基数10,然后通过像base62.decode这样的toString转换到基数16('4u8LPK581OHn7kRqRqP9ks').toString(16).
然而,由于基数62的值很大,JavaScript希望使用科学记数法来表示它,该记数法将转换为基数10,最后是基数16。
我尝试使用javascript biginteger来解析基数62的值。但是parse()将基数限制为2-32。
有人对另一种方法有建议吗?
使用biint并自己解码。我认为单for循环对的编码并不难
不是JAVA编码器,所以我坚持使用C++/伪代码:
//base62Alphabet[] = {a,b,c,...,A,B,C,...,0,1,2,...};
bigint out;
char in[]="4u8LPK581OHn7kRqRqP9ks'0";
int i,d;
for (out=0,i=0;in[i];i++)
{
out*=62;
d=unsigned int(in[i]);
// here convert d from char to value from alphabet
// for example i found this base62Alphabet in that case
// (more common is that numbers are first instead of last)
if (d<unsigned int('A')) d+= 0-'a';
else if (d<unsigned int('0')) d+=26-'A';
else d+=52-'0';
out+=d;
}
// here out should hold your value
// so just print it in hex (bigint libs should have some function for that)
// or code it yourself it is similar code but instead *=62 you div/mod by 16
【注释】
- 这应该适用于MSB第一个表示法(最有效的数字在左边的第一个)
- 还要检查你的数字使用的字母表,并相应地更改代码
- 在某些平台上,从char进行无符号int转换是必要的
- 因为char是有符号的,所以如果没有它,解码条件可能会出错
- 字母表是从这里来的
我为JS中的泛型基数转换编写了一个库,这可能对您有所帮助。https://github.com/cflynn07/power-radix
节点REPL 中的快速示例
> var PowerRadix = require('./lib/index');
undefined
> var base16 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'];
undefined
> new PowerRadix('4u8LPK581OHn7kRqRqP9ks', 62).toArray(base16)
[ 'A',
1,
2,
'D',
0,
8,
'B',
'C',
6,
'D',
9,
3,
'B',
'C',
4,
'E',
8,
'E',
'A',
8,
4,
7,
4,
3,
4,
'C',
9,
6,
0,
4,
1,
6 ]
> new PowerRadix('4u8LPK581OHn7kRqRqP9ks', 62).toString(base16)
'A12D08BC6D93BC4E8EA847434C960416'
我需要添加额外的文档+测试来显示这一点,但您也可以将任何值的数组作为第二个参数传递给构造函数,作为源基数。例如:
var base16 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'];
> new PowerRadix('4u8LPK581OHn7kRqRqP9ks', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')).toString(base16);
'A12D08BC6D93BC4E8EA847434C960416'
编辑:
添加了示例测试:
https://github.com/cflynn07/power-radix/blob/v2.3.0/test/index.spec.js#L197
相关文章:
- 使用键/代码转换JavaScript数组
- NS_ERROR_XPC_BAD_CONVERT_JS:无法转换JavaScript参数arg 0[nsIDOMWind
- 转换Javascript中的DayOfYear值以用于Flot
- 转换Javascript日期格式
- 字符串大小写转换 javascript
- 一个很好的文本到语音转换JavaScript库
- JQuery 函数突然停止工作,转换 Javascript 参数时出错
- 转换 JavaScript 代码
- 需要转换Javascript数组的格式
- 转换javascript中的日期格式
- 循环以转换JavaScript对象
- jQuery Post中的错误:无法转换JavaScript参数
- UglifyJS转换javascript代码
- Html到Haml的转换javascript
- 正在转换Javascript日期
- 转换Javascript关联对象并用PHP输出
- 转换JavaScript'这'到jQuery'$(这个)'
- 转换JavaScript数组
- 无法转换JavaScript参数arg 0 [nsIDOMWindow.getComputedStyle]
- jQuery美元.Firefox中的ajax错误:"无法转换JavaScript参数"