Используйте побитовое И со строкой на рубине на рельсах

Я хочу использовать побитовый оператор "&" с такой строкой:

 raw_counter_int = raw_counter.to_i
 raw_counter_bin = raw_counter_int.to_s(2)
 u = (2**62 + 2**63)
 k = u.to_s(2)
 r =  raw_counter_bin & k
 @counter_msg = r

но когда я запускаю свое приложение, у меня появляется это сообщение об ошибке:

undefined method `&' for "10000000000000000000000000000000000000000000000000000000":String

Как я могу использовать этот оператор «&» с raw_counter_int и u, которые преобразуются в двоичные файлы?

Я пытаюсь с этим: 0000 0000 1000 0000 0000 0000 0000 0000 (64 бита) взять байты между третьим байтом и 10-м байтом. Итак, я хочу сделать побитовое «&» с 0000 0000 1000 0000 0000 0000 0000 0000 и 0011 1111 1100 0000 0000 0000 0000 0000, чтобы взять только это: 00 0000 10


person Matarela    schedule 25.03.2014    source источник
comment
Здесь не нужно преобразование строк raw_counter_int.to_s(2) Я думаю.   -  person Arup Rakshit    schedule 25.03.2014
comment
Ну, вы конвертируете его в строку, чего вы ожидаете? & работает с числами, а не со строками. Это уже целое число, просто используйте &.   -  person Dave Newton    schedule 25.03.2014
comment
Почему ? При удалении .to_s (2) на raw_counter_bin и к, у меня что 0, так что я 652144440 & (2 <б> 62 + 2 63), и я хочу сделать 10000000000000000000 000000000000000000000000000000000000 & 1100000000000000000000000000000000000000000000000000000000000000   -  person Matarela    schedule 25.03.2014
comment
Я пытаюсь с этим: 0000 0000 1000 0000 0000 0000 0000 0000 (64 бита) взять байты между третьим байтом и 10-м байтом. Итак, я хочу сделать побитовое И с 0000 0000 1000 0000 0000 0000 0000 0000 и 0011 1111 1100 0000 0000 0000 0000 0000, чтобы взять только это: 00 0000 10   -  person Matarela    schedule 25.03.2014
comment
Обнаружил один баг, не связанный с этим. Но что касается побитовой операции ruby-forum.com/topic/ 85756   -  person Arup Rakshit    schedule 25.03.2014
comment
(12345678987654321 & 98765432123456789).to_s(2) работает.. Но, например, 123434 & (2**62 + 2**63).to_s(2) не работает.   -  person Arup Rakshit    schedule 25.03.2014


Ответы (1)


Я пытаюсь с этим: 0000 0000 1000 0000 0000 0000 0000 0000 (64 бита) взять байты между третьим байтом и 10-м байтом. Итак, я хочу сделать побитовое «&» с 0000 0000 1000 0000 0000 0000 0000 0000 и 0011 1111 1100 0000 0000 0000 0000 0000, чтобы взять только это: 00 0000 10

Давай сделаем это:

("00000000100000000000000000000000".to_i(2) & "00111111110000000000000000000000".to_i(2)).to_s(2)
=> "100000000000000000000000"

Что именно и ожидается! Число, показанное в ошибке ("10000000000000000000000000000000000000000000000000000000"), равно 2^56, что при использовании побитового И с ним и 2^62+2^63 ожидается, даст вам нулевой результат...

Я предлагаю вам еще раз проверить введенные данные и доверить работу & ruby...

person Uri Agassi    schedule 25.03.2014