我有一个(unsigned-byte 32)包含相当多数据的数组,其中一些数据采用浮点格式.也就是说,一些字节被处理为包含位字段的整数,而其中一些字节作为32位浮点数.
我需要读取和写入数组中的数据.
不幸的是,该函数sb-kernel:make-single-float接受了一个参数(signed-byte 32),并sb-kernel:single-float-bits返回一个带符号的单词,因此它们与我的向量不直接兼容.另一方面,将向量转换为包含有符号字节将使位字段操作变得痛苦.
到目前为止,我已经写过
(defun u32-to-sf (x)
(declare (optimize (speed 3) (compilation-speed 0) (debug 0))
(type (unsigned-byte 32) x))
(if (>= x #x80000000)
(sb-kernel:make-single-float (- x #x100000000))
(sb-kernel:make-single-float x)))
Run Code Online (Sandbox Code Playgroud)
这是正确的事情,但生成的程序集看起来很难看其条件跳转和不必要的比较和减法.
关于如何说服sbcl简单地接受unsigned-byte作为float-to-be的按位内容的按位内容的任何想法 ?