Search code examples
clojurehex

Clojure's equivalent to Python's encode('hex') and decode('hex')


Is there an idiomatic way of encoding and decoding a string in Clojure as hexadecimal? Example from Python:

'Clojure'.encode('hex')
# ⇒ '436c6f6a757265'
'436c6f6a757265'.decode('hex')
# ⇒ 'Clojure'

To show some effort on my part:

(defn hexify [s]
  (apply str
    (map #(format "%02x" (int %)) s)))

(defn unhexify [hex]
  (apply str
    (map 
      (fn [[x y]] (char (Integer/parseInt (str x y) 16))) 
      (partition 2 hex))))

(hexify "Clojure")
;; ⇒ "436c6f6a757265"

(unhexify "436c6f6a757265")
;; ⇒ "Clojure"

Solution

  • I believe your unhexify function is as idiomatic as it can be. However, hexify can be written in a simpler way:

    (defn hexify [s]
      (format "%x" (new java.math.BigInteger (.getBytes s))))