我需要使用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
这不起作用,但我是在正确的轨道上吗?
答案 0 :(得分: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个字节?这是我可以使第一个字节设置第二和第七位(读取小端)的唯一方法。
......这更像是一个'理解文档'的问题,而不是一个红宝石问题。
因此,阵列解决方案不是您需要的解决方案,因为您需要在数字中设置各个位。这最好使用(左)位移&lt;&lt;和oring |结果一起。
答案 1 :(得分: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 |