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 

这并不工作,但我在正确的轨道上?

+1

我编辑你的问题是关于Ruby,因为Rails不会帮助你做到这一点。 – 2010-01-12 21:00:02

+0

可能会在评论中添加一些示例代码并提供所需的结果 - 我不完全确定是否理解您的问题。 – 2010-01-12 21:19:54

+0

我怀疑他想交换数组中一组整数的字节顺序。 – 2010-01-12 21:23:33

难道你不能使用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 |结果在一起。

+0

我可能可以,我不认为这会很容易。我正在测试指令,看看我现在需要哪个 – 2010-01-12 21:20:36

+0

这可以在一个函数中完成吗? – 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  |