Подтвердить что ты не робот

Преобразование десятичных ↔ 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)
4b9b3361

Ответ 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