数値を2進数・8進数・16進数表現の文字列に変換するには


Tag: 数値

数値を2進数・8進数・16進数表現の文字列に変換するには

*print-base* で基数を指定するか、format で ~b, ~o, ~x, ~r を使います。

(let ((*print-base* 2))
  (prin1-to-string 255)) ;=> "11111111"

(format nil "~b" 255)    ;=> "11111111"
(format nil "~o" 255)    ;=> "377"
(format nil "~x" 255)    ;=> "FF"
(format nil "~8x" 255)   ;=> "      FF"
(format nil "~8,'0x" 255);=> "000000FF"

(format nil "~vr" 2 255)    ;=> "11111111"
(format nil "~vr" 8 255)    ;=> "377"
(format nil "~vr" 16 255)   ;=> "FF"

リーダで読み戻せる文字列にするには

*print-radix*nil以外を指定すると、基数を示す文字列も印字されます。

(let ((*print-base* 16)
      (*print-radix* t))
  (format nil "~S ~S" #(16) 255))
;=>"#(#x10) #xFF"