Коллекция байтов в строку на clojure - PullRequest
9 голосов
/ 25 августа 2011

Следующий код

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

Ответы [ 4 ]

24 голосов
/ 25 августа 2011
(let [byte-array (caesar-block-cypher 1 "Hello, world!")]
    (apply str (map char byte-array)))
17 голосов
/ 17 сентября 2013

Используйте Java-конструктор String для быстрого создания строки, как это,

(let [b (caesar-block-cypher 1 "Hello World")]
  (String. b))
6 голосов
/ 25 августа 2011

AFAIK Ceaser Chipher просто сдвигает символы, почему вы имеете дело с байтами,


(let [s "Attack"
      k 1
      encoded (map #(char (+ (int %) k)) s)
      decoded (map #(char (- (int %) k)) encoded)]
  (apply str decoded))

2 голосов
/ 30 ноября 2017

Вы можете использовать slurp, он также работает для байтовых массивов:

С https://clojuredocs.org/clojure.core/slurp#example-588dd268e4b01f4add58fe33

;; you can read bytes also

(def arr-bytes (into-array Byte/TYPE (range 128)))
(slurp arr-bytes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...