質問

私は、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()の?これは、バイト順のためのオプションがあります。

更新:[OK]を、私はあなたが言及したドキュメントと私は例の作品を作ることができる唯一の方法を見て撮影したが、この次のとおりです。

  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が一緒に2つのバイトを表す4つのニブルであることを意味するであろう意味でしょうか?それは私が最初のバイトが第二と第7ビットのセット(リトルエンディアンの読み込み)を持たせることができる唯一の方法である。

...これは、ルビーの問題を、それよりも、「理解ドキュメント」問題の詳細です。

あなたは数に個々のビットを設定する必要があるため、アレイのソリューションは、あなたが必要とするものではありませんので。これは最高の(左)ビットシフト<<と論理和演算を使用して達成されます|一緒に結果ます。

他のヒント

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     |  
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top