首页 > 解决方案 > 在clojure中将字节转换为字符串

问题描述

我正在将 clojure 中的字节数组转换为字符串,我遇到了一个奇怪的问题,我不知道原因。

字节数组定义为

(def a (byte-array  (byte 72) (byte 105)))

当我将它转换为它显示的矢量时

(vec a)

输出:(105、105、105、......68次......、105)

输出是一个包含 72 个元素的 105 数组。为什么会这样?我正在尝试将字节数组转换为字符串并使用

(String. (byte-array (byte 72) (byte 105)))

产生 72 个 i。另一方面,当我这样做时

(map char [(byte 72) (byte 105)])

我得到输出 H 和 I。这就是我试图将字节数组转换为向量的原因。如果有另一种方法,请告诉我。

标签: arraysstringclojure

解决方案


您正在调用双元版本,因此您的第一个参数设置size要创建的数组的,而您的第二个参数不是序列,因此它被认为是init-val; 看:

user=> (doc byte-array)
-------------------------
clojure.core/byte-array
([size-or-seq] [size init-val-or-seq])
  Creates an array of bytes

初始值也取自一个序列(正如参数名称所暗示的那样)。所以你可以这样做:

user=> (String. (byte-array [(byte 72) (byte 105)]))
"Hi"

推荐阅读