Sto chiamando un'API divertente che restituisce un array di byte, ma voglio un flusso di testo. C'è un modo semplice per ottenere un flusso di testo da un array di byte? Per ora ho appena buttato insieme:Come convertire l'array di byte in stringa in Common Lisp?
(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))
e poi avvolgere il risultato con-input-da-string, ma che non può essere il modo migliore. (Inoltre, è orribilmente inefficiente.)
In questo caso, so che è sempre ASCII, quindi interpretarlo come ASCII o UTF-8 andrebbe bene. Sto utilizzando SBCL compatibile con Unicode, ma preferirei una soluzione portatile (anche solo ASCII) a uno specifico di SBCL-Unicode.
Vero, ma sarebbe ancora facendo un stringa intermedia. Spero in una soluzione che possa avvolgere l'array di byte esistente in uno stream senza O (n) più spazio di archiviazione. Immagino che il mio titolo non sia stato molto buono. :-) – Ken