2010-01-12 6 views
3

Мне нужно преобразовать массив целых чисел в маленькую байт-бит с использованием 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 

Это не работает, но я на правильном пути?

+1

Я отредактировал ваш вопрос, чтобы быть с Ruby, потому что Rails не поможет вам в этом. –

+0

может добавить немного пример кода с желаемым результатом в комментариях - я не совсем уверен, понимаю ли я ваш вопрос. –

+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 nibbles, которые вместе представляют 2 байта? Это единственный способ сделать первый байт вторым и седьмым битом (чтение маленькой цифры).

... Это более «проблема с документами», чем проблема с рубином.

Так что решение массива - это не то, что вам нужно, потому что вам нужно установить отдельные биты в число. Это лучше всего достигается с помощью (левого) смещения бита < < и or'ing | результаты вместе.

+0

Я, вероятно, могу, я не думал, что это будет так просто. Я тестирую директивы, чтобы увидеть, что мне нужно сейчас –

+0

Можно ли это сделать в функции? –

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  | 
Смежные вопросы