Bi

Binaries in Elixir

8 exercises

About Binaries

  • The binary type is a specialization of the bitstring type.
  • Binaries are made up of bytes.
    • Bytes are 8 bits.
    • Bytes can represent numbers from 0 to 255
    • Hexadecimal integer values are common when working with bytes: 0x00 to 0xFF.
  • Binary literals are defined using the <<>> special form.
    • If you use an integer larger than 255 for a byte, only the last 8 bits are used, unless you specify the unit and/or size to use using the :: operator.
  • <>/2 can be used to concatenate bitstrings/binaries/strings.
<<255>> == <<0xFF>>
# Overflowing bits are truncated
<<256>> == <<0>>
<<256::size(16)>> == <<1, 0>>

<<"Hello">> == <<72, 101, 108, 108, 111>>

A null-byte is another name for <<0>>.

Strings are encoded binary data

  • Strings are encoded binary data in UTF-8 format.
    • They are encoded in 8-bit (one-byte) chunks, using up to 4 bytes to represent more than 255 characters.
    • The length of a string may not be the same as its byte size.
# This string has a string length of 5, but is made up of 7 bytes
string = "cześć"
String.length(string) != byte_size(string)

# Even emoji strings are encoded binaries
"👍" == <<240, 159, 145, 141>>

Pattern Matching on binary data

# Ignore the first 8 bytes, bind the remaining variable sized binary to `body`
<<_::binary-size(8), body::binary>>

This can be also done for strings:

# bind the first 5 bytes to `name`,
# match the string literal " the ",
# bind remaining bytes to `species`
<<name::binary-size(5), " the ", species::binary>> = <<"Frank the Walrus">>
{name, species}
# => {"Frank", "Walrus"}
Edit via GitHub The link opens in a new window or tab

Learn Binaries

Practicing is locked

Unlock 1 more exercise to practice Binaries