3

我需要使用 Ruby 将整数数组转换为小端位掩码。任何链接或提示将不胜感激。

该示例说 [2,7,9,11] => "4205"

a = [2,7,9,11] # 4205
b = [1,2,3,4] # 0F00
def array_to_mask(arr)
  mask = 0
  arr.each do |i|
    mask = mask | (1 << i)
  end
  return mask.to_s(16)
end
p array_to_mask(a) # a84
p array_to_mask(b) # 1e

这不起作用,但我在正确的轨道上吗?

4

2 回答 2

2

你不能使用arr.pack()吗?它具有字节顺序选项。

更新:好的,我已经查看了您提到的文档,我可以使示例工作的唯一方法是:

  7          2              11   9      (decimal index count)
0 1 0 0  0 0 1 0  0 0 0 0  0 1 0 1      (bits)

   4        2        0        5         (nibbles, in hex)

但这意味着这意味着 4205 是 4 个半字节,它们一起代表 2 个字节?这是我可以让第一个字节设置第二和第七位的唯一方法(读取小端)。

...这更像是一个“理解文档”的问题,而不是一个红宝石问题。

所以数组解决方案不是您需要的解决方案,因为您需要设置一个数字中的各个位。这最好使用(左)位移 << 和 or'ing | 来实现。结果在一起。

于 2010-01-12T20:57:58.913 回答
0

Enfora 给我发了一个计算器,我检查了它来编写一个函数。希望这个解释能帮助下一个尝试这个的人。

values: [2,7,9,11]
Bits:   | 8 7 6 5 | 4 3 2 1 | 16 15 14 13 | 12 11 10 9 |
Binary: | 0 1 0 0 | 0 0 1 0 | 0  0  0  0  | 0  1  0  1 |
Hex:    |    4    |    2    |      0      |      5     |  
于 2010-01-15T13:11:20.053 回答