gpt4 book ai didi

Clojure 相当于 Python 的编码 ('hex' ) 和解码 ('hex' )

转载 作者:行者123 更新时间:2023-12-03 22:58:00 29 4
gpt4 key购买 nike

是否有一种惯用的方式将 Clojure 中的字符串编码和解码为十六进制?来自 Python 的示例:

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

为了展示我的一些努力:

(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"

最佳答案

由于所有发布的解决方案都有一些缺陷,我分享我自己的:

(defn hexify "Convert byte sequence to hex string" [coll]
(let [hex [\0 \1 \2 \3 \4 \5 \6 \7 \8 \9 \a \b \c \d \e \f]]
(letfn [(hexify-byte [b]
(let [v (bit-and b 0xFF)]
[(hex (bit-shift-right v 4)) (hex (bit-and v 0x0F))]))]
(apply str (mapcat hexify-byte coll)))))

(defn hexify-str [s]
(hexify (.getBytes s)))



(defn unhexify "Convert hex string to byte sequence" [s] 
(letfn [(unhexify-2 [c1 c2]
(unchecked-byte
(+ (bit-shift-left (Character/digit c1 16) 4)
(Character/digit c2 16))))]
(map #(apply unhexify-2 %) (partition 2 s))))

(defn unhexify-str [s]
(apply str (map char (unhexify s))))

优点:
  • 高性能
  • 通用字节流 <--> 带有专用包装器的字符串转换
  • 处理十六进制结果中的前导零
  • 关于Clojure 相当于 Python 的编码 ('hex' ) 和解码 ('hex' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10062967/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com