Dlaczego hex -> base64 tak różni się od base64 -> hex za pomocą spakowania i rozpakowania?
Mam ten kod działający, który konwertuje z hex na base64 i odwrotnie. mamto_base64
z innego pytania SO i napisałemto_hex
z pewnym zgadywaniem, próbą i błędem.
class String
def to_base64
[[self].pack("H*")].pack("m0")
end
def to_hex
self.unpack("m0").first.unpack("H*").first
end
end
Ale tak naprawdę nie mam pojęciapack
iunpack
metody, nawet po przeczytaniu dokumentów. W szczególności jestem zdezorientowany asymetrią między dwiema implementacjami. Koncepcyjnie, w obu przypadkach, bierzemy ciąg zakodowany w jakiejś bazie (16 lub 64) i chcemy go przekonwertować na inną bazę. Więc dlaczego nie możemy wdrożyćto_hex
lubię to:
def to_hex
[[self].pack("m0")].pack("H*")
end
lubto_base64
za pomocąunpack
? Dlaczego baza, którą wybraliśmy, całkowicie zmienia metodę, której potrzebujemy, aby uzyskać konwersje?