У меня есть строка целых чисел "72101108108111", но это строка, представляющая байты исходной строки "Hello".Преобразование строки целых чисел в байтовый массив в Ruby
Как можно преобразовать «72101108108111» в строку Ascii «Hello» в Ruby?
У меня есть строка целых чисел "72101108108111", но это строка, представляющая байты исходной строки "Hello".Преобразование строки целых чисел в байтовый массив в Ruby
Как можно преобразовать «72101108108111» в строку Ascii «Hello» в Ruby?
Отвечая на Ваш вопрос разъяснен в комментарии (который не имеет ничего общего с названием):
мне нужно кодировать/декодировать строку в Base58
EDIT: теперь как класс (с использованием драгоценного камня base58):
require 'base58'
class Base58ForStrings
def self.encode(str)
Base58.encode(str.bytes.inject { |a, b| a * 256 + b })
end
def self.decode(b58)
b = []
d = Base58.decode(b58)
while (d > 0)
d, m = d.divmod(256)
b.unshift(m)
end
b.pack('C*').force_encoding('UTF-8')
end
end
Base58ForStrings.encode('Hello こんにちは')
# => "5scGDXBpe3Vq7szFXzFcxHYovbD9c"
Base58ForStrings.decode('5scGDXBpe3Vq7szFXzFcxHYovbD9c')
# => "Hello こんにちは"
Работы для любой строки UTF-8.
Спасибо за помощь. И как мне получить «Hello» из «9aJCVZR»? Декодирование даст мне целое число. – user3075906
s = '72101108108111'
pattern=/^[a-zA-Z]/
index,res=0,''
while index<s.size
len=0
while (s[index..index+len].to_i.chr=~pattern).nil?
len+=1
end
res << s[index..index+len].to_i.chr
index+=len+1
end
p res
Попробуйте это, потому что длина каждой строки, подлежащей расшифровке, не является достоверной.
Например, "72->'H' , 101->'e' , 23->'\x17'"
Таким образом, каждый раз, когда мы находим символ декодируется не "a~z" or "A~Z" (ex:\x17)
,
мы просто добавим длину и разобрать, пока мы не найдем символ, который мы хотим
Для этого случая, то ответ будет правильным "Hello"
Возможно, он неисправен в некоторых случаях, но теперь он хорошо работает для моего теста
Просто возьмите его взгляд
Он работает только без исключений на случай, содержащий только "A-Z и A-Z"
Это эксклюзивный случай, в котором содержится только английский персонаж, помните об этом! – DumDumGenius
Вы не можете. Невозможно определить, является ли первый байт '7' или' 72'. Если мы правильно догадаемся '72', то нельзя сказать, является ли второй байт' 1', '10' или' 101' и т. Д. Однако эта строка была сгенерирована, она не генерировалась с учетом декодирования. –
Можем ли мы это сделать, если предположить, что 2 цифры составляют байт? т.е. 72,10,11 и т. д.? – user3075906
Это не даст вам «Привет». Код ASCII для 'H' равен 72, но' e' равен 101. –