Little Endian位掩码
我需要使用Ruby将整数数组转换为小端位掩码。任何链接或提示将不胜感激。Little Endian位掩码
的例子说,[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'ing |结果在一起。
我可能可以,我不认为这会很容易。我正在测试指令,看看我现在需要哪个 – 2010-01-12 21:20:36
这可以在一个函数中完成吗? – 2010-01-13 14:57:37
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 |
我编辑你的问题是关于Ruby,因为Rails不会帮助你做到这一点。 – 2010-01-12 21:00:02
可能会在评论中添加一些示例代码并提供所需的结果 - 我不完全确定是否理解您的问题。 – 2010-01-12 21:19:54
我怀疑他想交换数组中一组整数的字节顺序。 – 2010-01-12 21:23:33