Binary 如何使用Chicken Scheme读取和写入二进制浮点?

Binary 如何使用Chicken Scheme读取和写入二进制浮点?,binary,scheme,chicken-scheme,Binary,Scheme,Chicken Scheme,我正在使用Chicken读取二进制数据格式,到目前为止,我已经通过执行类似于(fx+(fxshl(read byte)8)(read byte))(Big-Endian)的操作获得了int 如何读取和写入浮动?我必须能够读写IEEE 754-2008 32位和64位二进制浮点。到目前为止,我还没有找到任何好的库来做这件事,但我已经拼凑出了一些有用的东西。请注意,我只有读取字节和读取字符串可作为输入操作使用 ;; ;; These are some unfun C routines to

我正在使用Chicken读取二进制数据格式,到目前为止,我已经通过执行类似于
(fx+(fxshl(read byte)8)(read byte))
(Big-Endian)的操作获得了int


如何读取和写入浮动?我必须能够读写IEEE 754-2008 32位和64位二进制浮点。

到目前为止,我还没有找到任何好的库来做这件事,但我已经拼凑出了一些有用的东西。请注意,我只有
读取字节
读取字符串
可作为输入操作使用

  ;;
  ;; These are some unfun C routines to convert 4 int-promoted bytes to a float
  ;; by manually assembling the float using bitwise operators
  ;;
  ;; Caveat! These will only work on platforms in which floats are 32-bit Big
  ;; Endian IEEE754-2008 numbers and doubles are 64-bit Big Endian IEEE754-2008
  ;; numbers! Also, stdint.h.
  ;;
  (define (readFloat)
    (let ([c-read-float
            (foreign-lambda* float
              ((int i1)
               (int i2)
               (int i3)
               (int i4))
               "uint8_t b1 = (uint8_t) i1;
                uint8_t b2 = (uint8_t) i2;
                uint8_t b3 = (uint8_t) i3;
                uint8_t b4 = (uint8_t) i4;

                uint32_t i = 0;

                i = b1;
                i = (i << 8) | b2;
                i = (i << 8) | b3;
                i = (i << 8) | b4;

                float f = *(float*)&i;

                C_return(f);")])
        (let* ([i1 (read-byte)]
               [i2 (read-byte)]
               [i3 (read-byte)]
               [i4 (read-byte)])
          (c-read-float i1 i2 i3 i4))))
;;
;; 这些是一些unfunc例程,用于将4个整数提升字节转换为浮点值
;; 通过使用位运算符手动组合浮点
;;
;; 警告这些功能只适用于浮点数为32位的平台
;; Endian IEEE754-2008数字和双精度是64位Big-Endian IEEE754-2008
;; 数字!还有,stdint.h。
;;
(定义(readFloat)
(让([c-read-float
(国外λ*浮动
((int i1)
(int i2)
(int i3)
(int i4))
“uint8_t b1=(uint8_t)i1;
uint8_t b2=(uint8_t)i2;
uint8_t b3=(uint8_t)i3;
uint8_t b4=(uint8_t)i4;
uint32_t i=0;
i=b1;
i=(i)现在可以使用,这使得这个过程简单得多。