Convertat
Convertat is a small Elixir library that provides functions for converting values from and to arbitrary bases.
Installation
To use this library with Mix, just declare its dependency in the mix.exs file:
defp deps do
[
# Using the hex package manager:
{:convertat, "~> 1.0"},
# or grabbing the latest version (master branch) from GitHub:
{:convertat, github: "whatyouhide/convertat"},
]
end
Then run mix deps.get and go on with your life.
Usage
Convertat leverages on the power of the |> operator in order to provide a
clean syntax for converting values between bases.
For example, say we want to convert the binary value "11011" (27 in base 10)
to its hex representation:
"10110" |> Convertat.from_base(2) |> Convertat.to_base(16) #=> "1b"
That's pretty straightforward and, moreover, easily achievable using Elixir's
standard library. In fact, when using integers as bases, you're limited to the
standard 2..36 range. What about this:
"↑↓↑" |> Convertat.from_base(["↓", "↑"]) #=> 5
We just used a (binary, since it has two digits) base where the digits are the
↓ and ↑ characters.
Digits in list bases are listed from the least significant one to the most
significant one; in the above example, ↓ would be 0 in the binary base while
↑ would be 1.
We can also use lists as values (instead of strings); this allows for some cool multicharacter-digits bases. Here's another binary base:
["foo", "bar"] |> Convertat.from_base(["bar", "foo"]) #=> 2As you can see, digits significance in list values is the opposite from list bases: the least significant digits are on the right, like they would be in written numbers.
As you just saw, the from_base function converts a value in an arbitrary base
to an integer in base 10. The to_base functions does the opposite: it converts
an integer (in base 10) into a value in an arbitrary base.
20 |> Convertat.to_base(["a", "b"]) #=> "babaa"
As with from_base, bases can be integers (in the 2..36 range, just like with
the standard library) or lists of digits.
By default, a string representation of the converted number is returned. You can also specify that you want a list:
16 |> Convertat.to_base(16, as_list: true) #=> "10"This may seem useless, but think of the multichar-digits base from above:
2 |> Convertat.to_base(["bar", "foo"]) #=> "foobar"
How can you parse "foobar" back into a base 10 value with the same ["bar", "foo"] base?
base = ["bar", "foo"]
val = 2 |> Convertat.to_base(base, as_list: true) #=> val = ["foo", "bar"]
val |> Convertat.from_base(base) #=> 2License
MIT © 2014 Andrea Leopardi, see the license file