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