如何将整数字节列表转换为字符串?(Common Lisp场景)
解决整数列表转无符号字节向量并转换为字符串的问题
要将整数列表转换为符合(VECTOR (UNSIGNED-BYTE 8))类型的向量,不能直接用coerce——它生成的是通用向量(元素类型为t),无法满足字节转换函数的要求。正确的做法是用make-array明确指定元素类型,再用列表初始化向量内容。
具体实现代码
针对你的示例,完整转换代码如下:
(sb-ext:octets-to-string (make-array 3 :element-type '(unsigned-byte 8) :initial-contents '(30 40 50)))
如果要处理任意长度的整数列表,用更通用的写法:
(let ((byte-list '(30 40 50))) (sb-ext:octets-to-string (make-array (length byte-list) :element-type '(unsigned-byte 8) :initial-contents byte-list)))
原理说明
make-array的:element-type参数强制向量存储(unsigned-byte 8)类型的数据,完全匹配sb-ext:octets-to-string和babel:octets-to-string的输入要求。- 既然你已确认所有整数都不超过255,无需额外做数值校验或转换,直接传入列表即可完成向量初始化。
内容的提问来源于stack exchange,提问作者Philipp Ludwig
相关产品推荐
相关产品推荐

