Emacs 在状态栏中显示十六进制值的二进制版本

Emacs 在状态栏中显示十六进制值的二进制版本,emacs,cc-mode,Emacs,Cc Mode,我现在正在做很多嵌入式C编程,这意味着我一直在写这样的东西: (ioe_extra_A & 0xE7) 如果将光标放在0xE7上,emacs会在状态栏或迷你缓冲区中显示“0b1110 0111”,这样我就可以检查我的掩码是否符合我的意图,这将非常有用 通常,无论我希望emacs做什么,10分钟的谷歌搜索都会找到答案,但对于这一次,我已经用尽了搜索技巧,仍然没有找到答案 提前感谢。这似乎有效: (defvar my-hex-idle-timer nil) (defun my-hex-i

我现在正在做很多嵌入式C编程,这意味着我一直在写这样的东西:

(ioe_extra_A & 0xE7)
如果将光标放在0xE7上,emacs会在状态栏或迷你缓冲区中显示“0b1110 0111”,这样我就可以检查我的掩码是否符合我的意图,这将非常有用

通常,无论我希望emacs做什么,10分钟的谷歌搜索都会找到答案,但对于这一次,我已经用尽了搜索技巧,仍然没有找到答案

提前感谢。

这似乎有效:

(defvar my-hex-idle-timer nil)

(defun my-hex-idle-status-on ()
  (interactive)
  (when (timerp my-hex-idle-timer)
    (cancel-timer my-hex-idle-timer))
  (setq my-hex-idle-timer (run-with-idle-timer 1 t 'my-hex-idle-status)))

(defun my-hex-idle-status-off ()
  (interactive)
  (when (timerp my-hex-idle-timer)
    (cancel-timer my-hex-idle-timer)
    (setq my-hex-idle-timer nil)))

(defun int-to-binary-string (i)
  "convert an integer into it's binary representation in string format
By Trey Jackson, from https://stackoverflow.com/a/20577329/."
  (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))

(defun my-hex-idle-status ()
  (let ((word (thing-at-point 'word)))
    (when (string-prefix-p "0x" word)
      (let ((num (ignore-errors (string-to-number (substring word 2) 16))))
    (message "In binary: %s" (int-to-binary-string num))))))
键入
M-x my hex idle status on
将其打开


如上所述,感谢for。

出于好奇:那么为什么要写0xE7而不是0b11100111呢?好主意,但“0b”符号是正确的,我的编译器不支持它。这就是我需要的,谢谢!顺便说一句,这只是有点漂亮:(defun int to binary string(i)“将整数转换为字符串格式的二进制表示形式,由Trey Jackson,from.”(let((res“”)(cnt 0))(而(not(=i0))(setq res(concat)(if(=1(logand i))1“0”)res))(setq i(lsh i-1))(if(=cnt 3)(setq res(concat“res”)(setq cnt(+cnt 1))(if(string=res“”)(setq res“0”))res)