Почему 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? Почему база, которую мы выбрали, полностью меняет метод, который нам нужен для выполнения конверсий?

Ответы на вопрос(1)

Ваш ответ на вопрос