Je veux transformer un grand nombre, en l'occurrence le temps présent en secondes compté à partir du temps d'unix, en une chaîne hexadécimale.convertir un grand nombre en hexadécimal
J'ai piraté un code il y a longtemps, qui (je pense) a fonctionné sur une version antérieure d'emacs, mais ça ne marche plus sur emacs 23 que j'utilise maintenant (il est possible que je foirais le code). La difficulté au moment où je l'ai écrit était que le nombre était grand pour être traité comme un argument pour certaines fonctions, donc je devais le diviser, faire quelque chose, et les mettre ensemble. Par exemple, si vous donnez un grand nombre à string-to-number
, il renvoie un flottant même si je veux un entier.
Quelqu'un peut-il suggérer une réécriture?
Voici le code cassé que j'ai écrit. Cela ne fonctionne pas, mais peut vous donner une idée de ce que j'essaie de faire. Tout d'abord, ce sont tous les sous-programmes qui sont utilisés ci-dessous:
(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"))
)
Ce qui suit sera la principale fonction qui sera appelée:
(hexatridecimal (seconds-since-origin))
Faut-il que le travail de code sur un Emacs 32 bits? Ou pouvez-vous utiliser 64 bits? –
Je ne connaissais pas emacs avec une différence de 32/64 bits, mais j'utilise Linux 32 bits Ubuntu, donc c'est probablement 32 bits. – sawa