大きな数値、実際にはUNIXエポック時間から数えて秒単位の現在の時間を16進数の文字列に変換したいと思います。
私はずっと前にいくつかのコードをハッキングしましたが、それは(私が思うに)以前のバージョンのemacsで動作しましたが、現在使用しているemacs 23では動作しなくなりました(コードを台無しにした可能性があります)。
私が書いた当時の難しさは、特定の関数の1つの引数として扱うには数が多かったため、それを分割して何かを実行し、それらをまとめる必要がありました。たとえば、に大きな数を指定するとstring-to-number
、整数が必要な場合でもfloatが返されます。
誰かがそれの書き直しを提案できますか?
以下は私が書いた壊れたコードです。それは機能しませんが、私が何をしようとしているのかをあなたに理解させるかもしれません。まず、これらはすべて以下で使用されるサブルーチンです。
(defun seconds-since-origin ()
(string-to-number (concat
(number-to-string (- (string-to-number
(substring (format-time-string "%s") 0 5)
) 10000))
(substring (format-time-string "%s") 5)
)))
(defun hexatridecimal (decimal)
(concat
(let ((quotient (/ decimal 36))) (if (> quotient 35)
(hexatridecimal quotient)
(hexatridecimal-digit quotient)
))
(hexatridecimal-digit (% decimal 36))
))
(defun hexatridecimal-digit (number)
(nth number (list
"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
"k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"))
)
呼び出される主な関数は次のとおりです。
(hexatridecimal (seconds-since-origin))