javascript - 如何将 BigInt.js 的 Base64 正确转换为 Ruby

标签 javascript ruby biginteger type-conversion bigint

我正在使用 Leemon Baird 的 BigInt.js (documentation) 来处理大整数。我需要能够从 BigInt 到 Ruby 得到相同的整数。

示例 JS 文件:

var number = "1234567890987654321";
var bigNumber = str2bigInt(number, 10, 80); //10: input = Decimal
var bigNumber64 = bigInt2str(bigNumber, 64); //64: ouput = Base64
console.log(bigNumber64);
//--> 14Y4FInR1on

示例 Ruby 文件:

big_number_64 = '14Y4FInR1on'
big_number = Base64.decode64(big_number_64) #input: Base64: output: decoded string
big_number = big_number.unpack('B*').first #B*: output = Binary
big_number = big_number.to_i(2) #read big_number as binary, output = integer
puts big_number
#--> 26313825004518719100904402231695296969994

我的问题是我需要它相等

1234567890987654321 != 26313825004518719100904402231695296969994

我已经尝试过

big_number = big_number_64.unpack('m*').first.unpack('B*').first

并尝试反转该过程并检查 Base64 == Base64 而不是 Decimal == Decimal,但我似乎仍然无法使它们相等。

请帮忙。

最佳答案

当你通过Ajax传递参数时,它只是一个字符串。您所需要的只是 Ruby 可以理解并转换为整数的格式。

Ruby 可以理解任意长度的整数,因此您可以将其发送为 1234567890987654321 并调用 to_i

如果您有兴趣减少字符串表示形式的长度,可以将其转换为基数 36(Ruby 可以解释的最高基数),如下所示:

JS

var number = "1234567890987654321";
var bigNumber = str2bigInt(number, 10, 80); //10: input = Decimal
var bigNumber36 = bigInt2str(bigNumber, 36); //36: output = Base 36
console.log(bigNumber36);
//---> "9do1sjhjpei9"

ruby

big_number_36 = '9do1sjhjpei9'
big_number = big_number_36.to_i(36)
puts big_number
# => 1234567890987654321

关于javascript - 如何将 BigInt.js 的 Base64 正确转换为 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22263175/

相关文章:

javascript - 如何创建一个可模拟的类来连接到 mongoDB?

javascript - 我可以在不使用 XMLHttpRequest 或文档对象的情况下使用 Javascript 获取网页吗?

ruby - Youtube_It示例代码绘制参数错误

ruby - 基于 Rack 的 Web 服务器是否代表 FastCGI 协议(protocol)?

java - 在java中使用BigInteger查找阶乘?

javascript - 如何在javascript中处理大数字

javascript - 根据 img src 更改背景 JQuery

javascript - 如何避免自动加载清除用户正在编写的文本?

ruby-on-rails - 打开终端时自动运行命令(Linux Mint 16)

java - BigInteger.toByteArray() 在 java 中返回奇怪的值