gpt4 book ai didi

common-lisp - 如何在 Common Lisp 中将字节数组转换为字符串?

转载 作者:行者123 更新时间:2023-12-03 11:30:51 26 4
gpt4 key购买 nike

我正在调用一个有趣的 API,它返回一个字节数组,但我想要一个文本流。有没有一种简单的方法可以从字节数组中获取文本流?现在我只是拼凑起来:

(defun bytearray-to-string (bytes)
(let ((str (make-string (length bytes))))
(loop for byte across bytes
for i from 0
do (setf (aref str i) (code-char byte)))
str))

然后将结果包装在 with-input-from-string 中,但这不是最好的方法。 (另外,它的效率非常低。)

在这种情况下,我知道它始终是 ASCII,因此将其解释为 ASCII 或 UTF-8 就可以了。我正在使用可识别 Unicode 的 SBCL,但与 SBCL-Unicode 特定的解决方案相比,我更喜欢可移植(甚至仅 ASCII)解决方案。

最佳答案

FLEXI-STREAMS ( http://weitz.de/flexi-streams/ ) 具有便携转换功能

(flexi-streams:octets-to-string #(72 101 108 108 111) :external-format :utf-8)

=>

"Hello"

或者,如果你想要一个流:
(flexi-streams:make-flexi-stream
(flexi-streams:make-in-memory-input-stream
#(72 101 108 108 111))
:external-format :utf-8)

将返回一个从字节向量中读取文本的流

关于common-lisp - 如何在 Common Lisp 中将字节数组转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/600070/

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