【问题标题】:How to manipulate binary numbers efficiently in Crystal?如何在 Crystal 中有效地操作二进制数?
【发布时间】:2021-12-14 01:01:07
【问题描述】:

我正在尝试实现比特币规范 BIP-39,特别是 Generating the mnemonic 部分。以下是一些令人头疼的问题:

接下来,这些连接的位被分成 11 位的组,每个位编码一个从 0 到 2047 的数字,用作词表的索引。最后,我们将这些数字转化为单词,并将连接的单词作为助记句。

将二进制数分成 11 位的组。但是我如何在 Crystal 中有效地做到这一点?

这就是我所做的,我个人觉得这有点尴尬,但诚然它确实有效:

seed = "87C1B129FBADD7B6E9ABC0A9EF7695436D767AECE042BEC198A97E949FCBE14C0d"
# => "87C1B129FBADD7B6E9ABC0A9EF7695436D767AECE042BEC198A97E949FCBE14C0d"

bin = BigInt.new(seed, 16).to_s(2)
# => "100001111100000110110001001010011111101110101101110101111011011011101001101010111100000010101001111011110111011010010101010000110110110101110110011110101110110011100000010000101011111011000001100110001010100101111110100101001001111111001011111000010100110000001101"

iter = 0
size = 11
while iter < bin.size
  p bin[iter, size]
  # => "10000111110"
  # [...]
end

现在,正如我所说,它可以工作,我可以将二进制字符串转换回数字并继续,但这不可能。我想知道,有什么更优雅、更有效或更正确的方法来解决这个问题?

【问题讨论】:

    标签: binary numbers bitcoin crystal-lang


    【解决方案1】:

    抱歉,答案很简洁,但我认为您正在寻找的是BitArray。希望它对您有好处!

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      相关资源
      最近更新 更多