数字和 Bytes 相互转换,有现成的函数或库?

比如整数 #xABCD 当作 2 bytes 的 [#xAB #xCD],或者 1.24 当作 IEEE 754 单精度浮点数 [#x3F #xA0 0 0],双向转换,有没有现成的函数或库?类似于 Racket 的 integer->integer-bytes

打算试试用 Emacs 实现 MessagePack,需要该功能,没有的话还要自己实现,貌似不容易。

整数还比较简单。

(defun hack (num)
  (let ((str (seq-reverse (format "%x" num))))
    (apply #'vector
           (nreverse (mapcar (lambda (n)
                               (string-to-number (seq-reverse n) 16))
                             (seq-partition str 2))))))

;; (hack #xabcde)
;; => [10 188 222]
;; (list #xa #xbc #xde)
;; => (10 188 222)

如果要 IEEE 754 的话,Emacs 应該沒法打印 float 成 hex code。建议还是用 C 写,然后 dynamic module。

Common Lisp 有 ldb,然而 Emacs 沒有。

https://github.com/marijnh/ieee-floats/blob/master/ieee-floats.lisp

单纯把数字转成bytes,可以用这个。我个人不确定你提到的

这个语义是不是真正正确的

(defun binarize (num)
  (cl-map 'vector #'identity (encode-coding-string (format "%c" num)
                                                   'binary)))

直接封装现成的就行,这样免得他们升级标准这边还要改代码。