【发布时间】:2015-11-21 23:51:39
【问题描述】:
我在将我知道在 Ruby 中工作的东西转换为 Javascript 时遇到了问题(在这种情况下是 node.js,但如果可能的话,我想要一个浏览器支持的解决方案)
给定一个十六进制格式的 sha256 摘要:
"0b08dfe80a49490ae0722b9306ff53c5ab3552d17905814e6688ee62c373"
将其转换为如下所示的 base32 表示:
"BMEN72AKJFEQVYDSFOJQN72TYWVTKUWRPECYCTTGRDXGFQ3T"
我可以在 ruby 中执行此操作,方法是运行一个将十六进制转换为字符代码字符串的快速例程,然后对其进行 base32 编码。我似乎在 JavaScript 中找不到类似的方法。似乎没有可靠的方法来获取字符代码或 Base32 编码。
以 Ruby 代码为例,我只是一次将十六进制分成 1 个字符,然后进行快速的十六进制->十进制->字符转换:
s = "0b08dfe80a49490ae0722b9306ff53c5ab3552d17905814e6688ee62c373"
s2 = s.scan(/../).map { |x| x.hex.chr }.join
s3 = Base32.encode(s2)
中间字符串如下所示:
"\v\b\xDF\xE8\nII\n\xE0r+\x93\x06\xFFS\xC5\xAB5R\xD1y\x05\x81Nf\x88\xEEb\xC3s\x8AM"
【问题讨论】:
-
parseInt()和Number.prototype.toString()函数都采用可选的基本参数。然而,他们无法处理这么大的数字。 -
请记住有几个
base32规范。看起来您正在使用RFC 4648 "base32",但我知道的大多数 JS 实现都使用RFC 4648 "base32hex" 或Douglas Crockfords Base32。
标签: javascript node.js