将数字转换为 base-2(二进制)字符串表示

max*_*ler 4 emacs elisp

我想将数字转换为二进制字符串,例如 (to-binary 11) -> "1011"。

我已经找到了一种转换为十六进制和八进制的方法:

(format "%x" 11) -> "B"
(format "%o" 11) -> "13"
Run Code Online (Sandbox Code Playgroud)

但显然没有二进制格式字符串(“%b”给出错误)。

反过来转换也很简单:(string-to-number "1011" 2) -> 11

有没有其他库函数可以做到这一点?

Tre*_*son 6

虽然我同意这是功能的重复,但如果您询问如何在 Emacs lisp 中进行位操作,您可以阅读有关按位操作的手册。这可能导致这样的实现:

(defun int-to-binary-string (i)
  "convert an integer into it's binary representation in string format"
  (let ((res ""))
    (while (not (= i 0))
      (setq res (concat (if (= 1 (logand i 1)) "1" "0") res))
      (setq i (lsh i -1)))
    (if (string= res "")
        (setq res "0"))
    res))
Run Code Online (Sandbox Code Playgroud)