Я вызываю забавный 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 было бы хорошо. Я использую SBCL с поддержкой Unicode, но я бы предпочел портативное (даже ASCII-только) решение для SBCL-Unicode-специфичного.