我需要整数数组转换成低字节在前的位掩码使用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

这不会在正确的轨道上工作,但我是谁?

有帮助吗?

解决方案

你不能使用 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符号最好地实现|结果一起。

其他提示

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     |  
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top