#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
.