Как преобразовать строку октета в число?

Я пытаюсь преобразовать строку октета в целое число в Ruby.
На данный момент у меня есть это решение:

def octet_string_to_i(str)
  str.bytes.map { |v| format('%08b', v) }.join.to_i(2)
end

Это похоже на полное излишество. Я нашел другие вопросы о преобразовании его в строку, но ни одного о Integer. Есть ли способ достичь этого без предварительного прохождения строки, как в моем решении?


Пример значений и результатов:

foobar 112628796121458
barbaz 108170670399866
123456 54091677185334

1 ответ

Решение

Используя следующий код:

str.bytes.reverse_each.with_index.sum {|elem, idx| elem << (idx * 8) }

По сути, мы уменьшаем байты, добавляя их к сумме, перемещая каждый байт в правильную позицию, используя их индекс. Это избавляет от необходимости сначала преобразовывать в строку и обратно и достигает того же результата.

Кредит идет Sergio Tulentsev за код.

Другие вопросы по тегам