Неявное преобразование строки в кодировочные шины Integer base62
uuid = Digest::SHA256.digest(SecureRandom.uuid)
id = Base62.encode(uuid)
неявное преобразование строки в целое число
линия = id = Base62.encode(uuid)
2 ответа
Решение
для передачи строки в base62
uuid = SecureRandom.uuid.gsub("-", "").hex
@id = uuid.base62_encode
Я не думаю, что ваш код будет работать. Вот почему:
Base62.encode(num)
берет число base10 и преобразует его в строку base62. Это проблема для вас, как:
Digest::SHA256.digest(SecureRandom.uuid)
# => "\e\x1F\xD6yby\x02o\f)\xA2\x91\xD4\xFB\x85jd\xE0\xF7\xECtd\x8E\xA6\x9Ez\x99\xD8>\x04\nT"
Возвращает строку.
Если вы посмотрите на код в base62-rb
gem, и комментарий над методом, вы можете видеть, что он сравнивает строку с целым числом, что является ошибкой, которую я получаю, когда пытаюсь повторить это:
ArgumentError: comparison of String with 0 failed
Вот метод из драгоценного камня:
# From base62-rb.rb line 8-20:
# Encodes base10 (decimal) number to base62 string.
def self.encode(num)
return "0" if num == 0
return nil if num < 0
str = ""
while num > 0
# prepend base62 charaters
str = KEYS[num % BASE] + str
num = num / BASE
end
str
end
Все это, конечно, основано на том факте, что вы используете base62-rb
драгоценный камень. Итак, возможно, вы можете дать нам некоторый контекст и сообщить нам, что вы пытались?