2010-01-12 97 views
3

我需要使用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

回答

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個字節?這是我能夠讓第一個字節具有第二和第七位的唯一方法(讀取小端)。

...這更像是一個'理解文檔'的問題,而不是它的一個紅寶石問題。

因此,陣列解決方案不是您需要的解決方案,因爲您需要設置數字中的各個位。這是使用(左)移位< <和or'ing |結果在一起。

+0

我可能可以,我不認爲這會很容易。我正在測試指令,看看我現在需要哪個 – 2010-01-12 21:20:36

+0

這可以在一個函數中完成嗎? – 2010-01-13 14:57:37

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  |