Por que razão hex -> base64 é tão diferente de base64 -> hex usando pack and unpack?
Eu tenho esse código funcionando, que converte de hex para base64 e vice-versa. Eu tenhoto_base64
de outra pergunta SO, e eu escrevito_hex
com alguma adivinhação e tentativa e erro.
class String
def to_base64
[[self].pack("H*")].pack("m0")
end
def to_hex
self.unpack("m0").first.unpack("H*").first
end
end
Mas eu não gosto muito dopack
eunpack
métodos, mesmo depois de ler os documentos. Especificamente, estou confuso com a assimetria entre as duas implementações. Conceitualmente, em ambos os casos, tomamos uma string codificada em alguma base (16 ou 64) e desejamos convertê-la em outra base. Então, por que não podemos implementarto_hex
como isso:
def to_hex
[[self].pack("m0")].pack("H*")
end
outo_base64
usandounpack
? Por que a base escolhida altera completamente o método que precisamos usar para realizar conversões?