Преобразование десятичных ↔ hex
Учитывая список десятичных чисел, как каждый номер может быть преобразован в его эквивалентное шестнадцатеричное значение, и наоборот?
Например:
(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)
Ответы
Ответ 1
Число в шестнадцатеричный:
(format "%X" 255) ;; => "FF"
Вы также можете выполнить нулевое значение с помощью:
(format "%03X" 255) ;; => "0FF"
Где 0
- символ, используемый для заполнения, а 3
- количество пробелов для прокладки.
Шестая строка для номера
(string-to-number "FF" 16) ;; => 255
16
означает "считать базой-16".
Ответ 2
Если вы просто хотите ввести шестнадцатеричное число в Emacs, нет необходимости вызывать string-to-number
, просто используйте синтаксис #x
reader:
#xFF
==> 255
Вы также можете использовать #b
для двоичного кода, #o
для восьмеричных чисел или #36r
для базы 36:
#b10011001
==> 153
#o777
==> 511
#36rHELLO
==> 29234652
См. раздел 3.1 Целочисленные основы в руководстве Emacs Lisp
Ответ 3
Вы также можете установить переменную *print-base*
в 16. Вы можете это глобально:
(setf *print-base* 16) (print '(10 20 30 40)) => (A 14 1E 28)
или локально:
(let ((*print-base* 16)) (dolist (c '(10 20 30 40)) (print c)))
=>A
14
1E
28
NIL