Ruby将整数转换为二进制到整数的设置位数组

mah*_*ich 1 ruby binary xor

假设我有一个整数98.此字符串的二进制表示形式为:

(98).to_s(2) # 1100010
Run Code Online (Sandbox Code Playgroud)

现在我想将这个二进制字符串转换为所有设置位的整数数组.这会给我:

[64,32,2]
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

更新: int转换为int数组不一定需要涉及String,这正是我所知道的.我假设非String操作也会更快.

看到所有这些不同的方法来处理这个问题,Ruby非常棒!

Ste*_*fan 6

这可行:

i = 98
(0...i.bit_length).map { |n| i[n] << n }.reject(&:zero?)
#=> [2, 32, 64]
Run Code Online (Sandbox Code Playgroud)

一步步:

(0...i.bit_length).map { |n| i[n] }
#=> [0, 1, 0, 0, 0, 1, 1]

(0...i.bit_length).map { |n| i[n] << n }
#=> [0, 2, 0, 0, 0, 32, 64]

(0...i.bit_length).map { |n| i[n] << n }.reject(&:zero?)
#=> [2, 32, 64]
Run Code Online (Sandbox Code Playgroud)

你可能想要reverse结果.

  • 它不仅可以工作,而且比迄今为止的其他示例那样通过“String”要干净得多。 (2认同)
  • @mahatmanich 有一个“bit_length”的 Ruby 实现:https://github.com/marcandre/backports/blob/master/lib/backports/2.1.0/fixnum/bit_length.rb 否则,您可以使用固定值,具体取决于关于你的数字。 (2认同)