Convertir décimal hexadécimal
Étant donné une liste de nombres décimaux, comment chaque nombre peut-il être converti en sa valeur hexadécimale équivalente, et vice versa?
Par exemple:
(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)
4 réponses
Nombre à hexadécimal:
(format "%X" 255) ;; => "FF"
Vous pouvez également zero-pad la valeur avec:
(format "%03X" 255) ;; => "0FF"
, la 0
est le caractère à utiliser pour le remplissage et 3
est le nombre d'espaces à la map.
Chaîne hexadécimale au nombre
(string-to-number "FF" 16) ;; => 255
Le 16
signifie " lire comme base-16."
Si vous voulez simplement taper un nombre hexadécimal dans Emacs, il n'est pas nécessaire d'appeler string-to-number
, utilisez simplement la syntaxe du lecteur #x
:
#xFF
==> 255
Vous pouvez aussi utiliser #b
pour les binaires, #o
pour les nombres octaux, ou #36r
pour base 36:
#b10011001
==> 153
#o777
==> 511
#36rHELLO
==> 29234652
Voir section 3.1 notions de base sur les entiers dans le manuel Emacs Lisp
J'étais intéressé à convertir des caractères octaux en caractères hexadécimaux dans un fichier source.
Je voulais interroger la recherche et remplacer sur le texte suivant:
'\0' -> "\\0", // Null
'\7' -> "\\a", // Bell (^G)
'\b' -> "\\b", // Backspace (^H)
'\13' -> "\\v", // Vertical tab (^K)
'\33' -> "\\e", // Escape (^[)
Ici était l'expression régulière de rechercher et de remplacer
C-M-%
'\\\([0-9]+\)'
RET
'\,(format "\\0x%04X" (string-to-number \1 8))'
RET
Le résultat est:
'\0x0000' -> "\\0", // Null
'\0x0007' -> "\\a", // Bell (^G)
'\b' -> "\\b", // Backspace (^H)
'\0x000B' -> "\\v", // Vertical tab (^K)
'\0x001B' -> "\\e", // Escape (^[)
, Vous pouvez également définir la variable *print-base*
16. Vous pouvez cela globalement:
(setf *print-base* 16) (print '(10 20 30 40)) => (A 14 1E 28)
, Ou localement:
(let ((*print-base* 16)) (dolist (c '(10 20 30 40)) (print c)))
=>A
14
1E
28
NIL