Преобразовать строку Base64 в целое число в Ruby

#ruby #base64

#ruby #base64

Вопрос:

Я хотел бы преобразовать значения Base64, такие как «AAAAAAAAABI =», в соответствующее им целое число. Я возился с Base64.decode64, но было не очевидно, как это будет частью решения.

 irb > require 'base64'
 => true 
irb > Base64.decode64('AAAAAAAAABI=')
 => "x00x00x00x00x00x00x00x12" 
  

Комментарии:

1. Хех! Он преобразовал первую ‘A’ в ее двоичный эквивалент (отображается как шестнадцатеричное значение 12) и сохранил его в октете младшего порядка 64-разрядного int. Вы можете обнаружить, что сразу после этого первого 64-битных целых чисел хранится на 12 (десятичных) больше. Если вы их не видите, можете ли вы как-то это сделать? Это дало бы вам лучшее представление о том, что происходит.

Ответ №1:

Это должно быть то, что вам нужно. Если нет, взгляните на String#unpack для получения дополнительной информации о том, что он может сделать.

 require 'base64'
i = Base64.decode64('AAAAAAAAABI=')
i.unpack('q*').first
# => 1297036692682702848 
  

Комментарии:

1. Если вы собираетесь использовать unpack , то вы можете избавиться от библиотеки base64 и сделать это полностью, используя unpack ; на самом деле, Base64.decode64 реализовано как unpack("m").first , поэтому ваш код эквивалентен 'AAAAAAAAABI='.unpack('m').first.unpack('q*').first .