Как преобразовать строку октета в число?
Я пытаюсь преобразовать строку октета в целое число в 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 за код.