arrays - 在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。这就是我试图将字节数组转换为向量的原因。如果有另一种方法,请告诉我。
解决方案
您正在调用双元版本,因此您的第一个参数设置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"
推荐阅读
- graphql - 除了列表查询之外,GraphQL 还应该提供单项查询吗?
- kubernetes-helm - 由于安全上下文错误,Helm 在 openshift 中失败
- iis - Telerik:未捕获的 TypeError:无法读取 null 的属性(读取“值”)
- php - jQuery load() 无法加载带有文本文件的 php 页面?
- flutter - 颤振 BlocProvider 导航
- ios - 我该如何解决致命错误:找不到模块'package_name'
- c# - SQL DataReader 到数组中
- python - 合并不同大小的数据框并绘制列的差异
- r - 重现使用 R 进行卡方检验的过程
- typescript - Vuelidate 打字