I am looking for a way to convert a base-10 number into a base-N number where N can be large. Specifically i am looking at converting to base-85 and back again. Does anyone know a simple algorithm to perform the conversion? Ideally it would provide something like:
to_radix(83992, 85) -> [11, 53, 12]
Any ideas are appreciated!
Roja
That was kind of an interesting question, so I went a little overboard:
This works for arbitrary bases. It only works for integers, although there is no reason why it couldn’t be extended to work with any arbitrary number. Also, it ignores the sign of the number. Again, there is no reason why it must do that, but mainly I didn’t want to have to come up with a convention for returning the sign in the return value.
I also extended the
to_smethod so that it works with bases greater than 36. If you want to use a base greater than 36, you have to pass in a mapping object which maps the “digits” to strings. (Well, actually, all that is required is that you provide an object that responds to[]and returns something which responds toto_s. So, a string is perfect, but e.g. an array of integers also works.)It also accepts an optional separator, which is used to separate the digits.
For example, this allows you to format an IPv4 address by treating it as a base-256 number and using the identity for the mapping and
'.'as the separator:Here’s an (incomplete) testsuite: