elisp - para - emacs source code
Convertir decimal<-> hexadecimal (4)
Dada una lista de números decimales, ¿cómo se puede convertir cada número a su valor hexadecimal equivalente y viceversa?
Por ejemplo:
(convert2hex 255 64 64); -> (FF 40 40) (convert2dec FF 40 40); -> (255 64 64) (convert2hex 255 64 64 255 64 64 128) (convert2dec FF 40 40 FF 40 40 80)
Estaba interesado en convertir caracteres octales en caracteres hexadecimales en un archivo fuente.
Quería consultar la búsqueda y reemplazar en el siguiente texto:
''/0'' -> "//0", // Null
''/7'' -> "//a", // Bell (^G)
''/b'' -> "//b", // Backspace (^H)
''/13'' -> "//v", // Vertical tab (^K)
''/33'' -> "//e", // Escape (^[)
Aquí estaba la expresión regular de búsqueda y reemplazo
CM-%
''///([0-9]+/)''
JUBILADO
''/,(format "//0x%04X" (string-to-number /1 8))''
JUBILADO
El resultado es:
''/0x0000'' -> "//0", // Null
''/0x0007'' -> "//a", // Bell (^G)
''/b'' -> "//b", // Backspace (^H)
''/0x000B'' -> "//v", // Vertical tab (^K)
''/0x001B'' -> "//e", // Escape (^[)
Número a hexadecimal:
(format "%X" 255) ;; => "FF"
También puede rellenar con cero el valor con:
(format "%03X" 255) ;; => "0FF"
Donde 0
es el carácter que se usa para el relleno y 3
es el número de espacios para rellenar.
Cadena hexagonal a número
(string-to-number "FF" 16) ;; => 255
El 16
significa "leído como base-16".
Si solo desea escribir un número hexadecimal en Emacs, no es necesario llamar string-to-number
, solo use la sintaxis del lector #x
:
#xFF
==> 255
También puede usar #b
para binarios, #o
para números octales, o #36r
para base 36:
#b10011001
==> 153
#o777
==> 511
#36rHELLO
==> 29234652
Consulte la sección 3.1 Conceptos básicos sobre enteros en el Manual de Emacs Lisp
También puede establecer la variable *print-base*
en 16. Puede hacerlo globalmente:
(setf *print-base* 16) (print ''(10 20 30 40)) => (A 14 1E 28)
o localmente:
(let ((*print-base* 16)) (dolist (c ''(10 20 30 40)) (print c)))
=>A
14
1E
28
NIL