Ruby Waves 平台的 Base58
Ruby Base58 for Waves platform
我想在 ruby 上为我的项目实施 Wavesplatform 包装器。
我一开始就卡住了,试图用 Base58 和比特币字母表实现 Docs 中的示例。
The string "teststring" are coded into the bytes [5, 83, 9, -20, 82,
-65, 120, -11]. The bytes [1, 2, 3, 4, 5] are coded into the string "7bWpTW".
num = BaseX.string_to_integer("7bWpTW", numerals: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")
puts bytes = [num].pack("i").inspect
=> "\x05\x04\x03\x02"
输出有点类似于示例中的 [1, 2, 3, 4, 5] 字节数组,但我不确定如何正确操作字节。
pack
/unpack
在这里没有多大帮助:大小未确定并且您获得的整数可能包含(并且在大多数情况下包含)许多字节。应该在这里编写一些代码:
byte_calculator = ->(input, acc = []) do
rem, val = input.divmod(256)
acc << (val > 128 ? val - 256 : val)
rem <= 0 ? acc : byte_calculator.(rem, acc)
end
byte_calculator.
(BaseX::Base58.string_to_integer("teststring")).
reverse
#⇒ [
# [0] 5,
# [1] 83,
# [2] 9,
# [3] -20,
# [4] 82,
# [5] -65,
# [6] 120,
# [7] -11
# ]
反向转换的操作方式相同:
BaseX::Base58.integer_to_string([1, 2, 3, 4, 5].
reverse.
each_with_index.
reduce(0) do |acc, (e, idx)|
acc + e * (256 ** idx)
end)
#⇒ "7bWpTW"
我想在 ruby 上为我的项目实施 Wavesplatform 包装器。 我一开始就卡住了,试图用 Base58 和比特币字母表实现 Docs 中的示例。
The string "teststring" are coded into the bytes [5, 83, 9, -20, 82, -65, 120, -11]. The bytes [1, 2, 3, 4, 5] are coded into the string "7bWpTW".
num = BaseX.string_to_integer("7bWpTW", numerals: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")
puts bytes = [num].pack("i").inspect
=> "\x05\x04\x03\x02"
输出有点类似于示例中的 [1, 2, 3, 4, 5] 字节数组,但我不确定如何正确操作字节。
pack
/unpack
在这里没有多大帮助:大小未确定并且您获得的整数可能包含(并且在大多数情况下包含)许多字节。应该在这里编写一些代码:
byte_calculator = ->(input, acc = []) do
rem, val = input.divmod(256)
acc << (val > 128 ? val - 256 : val)
rem <= 0 ? acc : byte_calculator.(rem, acc)
end
byte_calculator.
(BaseX::Base58.string_to_integer("teststring")).
reverse
#⇒ [
# [0] 5,
# [1] 83,
# [2] 9,
# [3] -20,
# [4] 82,
# [5] -65,
# [6] 120,
# [7] -11
# ]
反向转换的操作方式相同:
BaseX::Base58.integer_to_string([1, 2, 3, 4, 5].
reverse.
each_with_index.
reduce(0) do |acc, (e, idx)|
acc + e * (256 ** idx)
end)
#⇒ "7bWpTW"