You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've got a bunch of binary operations working for my (embedded) use-case, but they're fiddlier than they need to be.
Converting a number to binary is easy:
(set! dec_base (fn* ( n b )
"Convert the given number to a string representation of the number in the given base.
Example: (dec_base 254 2) ; int -> binary
Example: (dec_base 201 16) ; int -> hex"
(if (< n b)
(chr (+ n (if (< n 10) 48 55)))
(join (list (dec_base (/ n b) b) (dec_base (% n b) b)))
)))
But to convert back I've fallen back to using eval:
(set! bin2dec (fn* (n)
"Convert the given binary string to an integer.
Example: (print (bin2dec \"1101\"))
See-also: dec_base, hex2dec"
(eval (join (list "0b" n)))))
(set! hex2dec (fn* (n)
"Convert the given hex string to an integer.
Example: (print (hex2dec \"ff\"))
See-also: dec_base, bin2dec"
(eval (join (list "0x" n)))))
Using eval like this is probably safe, but it feels like a code-smell.
Adding a conversion/parsing routine as native would help. Consider moving the rest to the stdlib once I've validated they're sane:
;;; bits.lisp - Binary functions
;; This file contains binary functions "and", "or", and "xor" for bits
;; and integers.
;;
;; We have some numerical conversion routines for converting between
;; integers and hex/binary numbers.
;;
;; Finally we also have some routines for testing whether a given bit
;; in a number is set, or unset. As well as forcibly clearing or setting
;; them.
;;
;; NOTE: Most of these routines will fail for "large" values. 64-bit is
;; fine, after that good luck.
;;
The text was updated successfully, but these errors were encountered:
I've got a bunch of binary operations working for my (embedded) use-case, but they're fiddlier than they need to be.
Converting a number to binary is easy:
But to convert back I've fallen back to using
eval
:Using eval like this is probably safe, but it feels like a code-smell.
Adding a conversion/parsing routine as native would help. Consider moving the rest to the stdlib once I've validated they're sane:
The text was updated successfully, but these errors were encountered: