2010-03-01 26 views
20

Ondalık sayıların bir listesi verilir, her bir sayı eşdeğeri onaltılık değerine nasıl dönüştürülebilir, bunun tersi de olabilir mi?Dönüştürme ondalık <-> onaltılık

 
(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

mi? Yaparak başlayacağım şey, ondan başlayarak on altının tabanına dönüştürmek için algoritmayı yüksek bir seviyede anlama, ondan önce * bunu lisp'de uygulamaya çalışıyorum. –

+3

Ödev yok. Emacs Lisp muhtemelen herhangi bir okulun radarında değil mi? :-) Gerçek dönüşüm yeteneğinin Emacs'te bir yerlerde olabileceğini düşünürdüm. Eğer sadece bir sayıyı dönüştürmek istersem, örneğin Calc'i kullanabilirim. –

+0

Okuldayken lisp yazdım. Calc çağırmak overkill gibi görünüyor, temel dönüşüm algo o kadar da kötü değil. –

cevap

29

Numara Hex: Örneğin

(format "%X" 255) ;; => "FF" 

yapabilirsiniz ayrıca sıfır-pad ile değeri: 0 kullanmak karakteridir

(format "%03X" 255) ;; => "0FF" 

dolgu için ve 3, ped için boşluk sayısıdır. numaraya

Hex dize

(string-to-number "FF" 16) ;; => 255 

16 "üs-16 olarak okunur" anlamına gelir. ,

#xFF 
==> 255 

Ayrıca sekizlik sayılar için ikili için #b, #o kullanabilirsiniz: Sadece Emacs içine onaltılık sayı yazın isterseniz

+0

argüman '16' Radix olarak adlandırılır. – ocodo

15

, sadece #x okuyucu sözdizimini kullanın, string-to-number aramaya gerek yoktur veya tabanın 36 için #36r:

#b10011001 
==> 153 
#o777 
==> 511 
#36rHELLO 
==> 29234652 

Manuel Emacs Lisp içinde section 3.1 Integer Basics görün

-2

Ayrıca değişken *print-base* 16'e ayarlanmış olabilir yapabilirsiniz global bu:

(setf *print-base* 16) (print '(10 20 30 40)) => (A 14 1E 28) 

veya yerel olarak: Bu ödev

(let ((*print-base* 16)) (dolist (c '(10 20 30 40)) (print c))) 
=>A 
14 
1E 
28 
NIL 
+0

Bu belge nerede? Biliyorum bu bir _Common Lisp_ olayı, ama bunun Emacs Lisp'de işe yaradığını sanmıyorum. – ocodo

+0

Common Lisp'de p üzerinde belgelenmiştir. 559/CLtL. Bunu HyperSpec http://clhs.lisp.se/Body/v_pr_bas.htm adresinde de bulabilirsiniz. Ancak Emacs Lisp için bunun uygulanamayacağını düşünüyorum. – Leo

+0

Bence noktayı kaçırıyorsun. Bu soru EmacsLisp CL değil – ocodo

İlgili konular