convertat alternatives and similar packages
Based on the "Text and Numbers" category.
Alternatively, view convertat alternatives based on common mentions on social networks and blogs.
-
money
Elixir library for working with Money safer, easier, and fun... Is an interpretation of the Fowler's Money pattern in fun.prog. -
nanoid
Elixir port of NanoID, a secure and URL-friendly unique ID generator. https://hex.pm/packages/nanoid -
secure_random
Convenience library for random base64 strings modeled after my love for Ruby's SecureRandom -
chinese_translation
An elixir module to translate simplified Chinese to traditional Chinese, and vice versa, based on wikipedia data -
inet_cidr
CIDR library for Elixir that is compatible with Erlang's :inet and supports both IPv4 and IPv6 -
Ex_Cldr_Units
Unit formatting (volume, area, length, ...) functions for the Common Locale Data Repository (CLDR) -
minigen
Pure random data generation library, appropriate for realistic simulations in the Erlang ecosystem
CodeRabbit: AI Code Reviews for Developers
Do you think we are missing an alternative of convertat or a related project?
Popular Comparisons
README
Convertat
Convertat is a small Elixir library that provides functions for converting values from and to arbitrary bases.
Installation and docs
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
. The documentation for the current and the older
versions of Convertat can be found on its hex.pm
page.
Usage
Convertat leverages on the power of the |>
operator in order to provide a
clean syntax for converting values between bases. The only two functions that it
exports are Convertat.from_base/2
and Convertat.to_base/3
.
For example, say we want to convert the binary value "11011"
(27 in base 10)
to its hex representation:
iex> "10110" |> Convertat.from_base(2) |> Convertat.to_base(16)
"1b"
That's pretty straightforward and, moreover, easily achievable using Elixir's
standard library (String.to_integer/2
and to_string/1
). In fact, when using
integers as bases, you're limited to the standard 2..36
range.
What about this:
iex> "↑↓↑" |> Convertat.from_base(["↓", "↑"])
5
We just used a binary (it has two digits) base where the digits are the "↓"
and "↑"
strings.
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:
iex> ["foo", "bar"] |> Convertat.from_base(["bar", "foo"])
2
As you can see, digits significance in list values is the opposite from bases: the least significant digits are on the right, like they would be in written numbers.
While the from_base/2
function converts a value in an arbitrary base to an
integer in base 10, the to_base/3
function does the opposite:
iex> 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:
iex> 16 |> Convertat.to_base(16, as_list: true)
["1", "0"]
This may seem useless, but think of the multichar-digits base from above:
iex> 2 |> Convertat.to_base(["bar", "foo"])
"foobar"
How can you parse "foobar"
back into a base 10 value with the same ["bar",
"foo"]
base?
iex> base = ["bar", "foo"]
["bar", "foo"]
iex> val = 2 |> Convertat.to_base(base, as_list: true)
["foo", "bar"]
iex> val |> Convertat.from_base(base)
2
One more thing: if you're converting between bases a lot of times, consider
import
ing the two functions for a uber-clean syntax:
iex> import Convertat, only: :functions
nil
iex> "1011" |> from_base(2) |> to_base(16)
"b"
Contributing
If you wish to contribute to this project, well, thanks! You know the deal:
- fork the repository
- make changes and add/update tests
- make sure the tests pass by running
mix test
- commit changes
- open a pull request
Feel free to open an issue if you find something wrong with the library.
License
MIT © 2014 Andrea Leopardi, see [the license file](LICENSE.txt)
*Note that all licence references and agreements mentioned in the convertat README section above
are relevant to that project's source code only.