Почему hex -> base64 так отличается от base64 -> hex с использованием pack и unpack?
Я получил этот код работает, который преобразует из шестнадцатеричного в base64, и наоборот. я получилto_base64
из другого ТАК вопроса, и я написалto_hex
с некоторыми догадками и методом проб и ошибок.
class String
def to_base64
[[self].pack("H*")].pack("m0")
end
def to_hex
self.unpack("m0").first.unpack("H*").first
end
end
Но я не оченьpack
а такжеunpack
методы, даже после прочтения документов. В частности, меня смущает асимметрия между двумя реализациями. Концептуально в обоих случаях мы берем строку, закодированную в некоторой базе (16 или 64), и мы хотим преобразовать ее в другую базу. Так почему мы не можем реализоватьto_hex
нравится:
def to_hex
[[self].pack("m0")].pack("H*")
end
или жеto_base64
с помощьюunpack
? Почему база, которую мы выбрали, полностью меняет метод, который нам нужен для выполнения конверсий?