Search code examples
stringbinaryelixirhexdump

Convert a binary string to Hexadecimal and vice-versa in Elixir


How do you convert a binary string to a Hexadecimal String and vice-versa in Elixir?

There are a few posts on SO regarding this topic for other "main stream" languages. There's even an SO post that benchmarks various C# implementations

How do we do this in elixir?

My implementation was too ugly to share... :(


Solution

  • I came here wanting to convert between hex strings and binary data (not strings). The accepted answer is correct, because strings in Elixir are binaries, but I found it confusing that the answer uses "foo" as an example. Base.encode16/2 / Base.decode16!/2 works for all binaries, of which strings are a subset.

    Hex to binary:

    Base.decode16!("0001FEFF")
    => <<0, 1, 254, 255>>
    

    Binary to hex:

    Base.encode16(<<0, 1, 255, 255>>)
    => "0001FFFF"
    
    Base.encode16(<<0x66, 0x6F, 0x6F>>) # equivalent to "foo"
    => "666F6F"
    
    Base.encode16("foo")
    => "666F6F"