Следующий код
(defn caesar-block-cypher
"Computes the caesar block cypher for the given text with the k key. Returns an array of bytes"
[k text]
(let [byte-string (.getBytes text)]
(loop [return-byte-array [] byte-string byte-string]
(if (= '() byte-string)
return-byte-array
(recur
(conj return-byte-array (byte (+ k (first byte-string))))
(rest byte-string))))))
Возвращает массив байтов после обработки шифра Цезаря с ключом k в тексте.Я хочу преобразовать обратно байтовый массив в строку или выполнить шифрование непосредственно над строкой, но (new String return-byte-array)
не работает.Любые предложения?
РЕДАКТИРОВАТЬ: Спасибо за ответы.Я пересказал это в более функциональном стиле (который на самом деле работает):
(defn caesar-block-cypher
"Computes the caesar block cypher for the given text with the k key."
[k text & more]
(let [byte-string (.getBytes (apply str text (map str more)))]
(apply str (map #(char (mod (+ (int %) k) 0x100)) byte-string))))