バイ

バイナリ の Elixir

7個の演習

バイナリについて

  • バイナリ型は、ビット列型を特殊化したものです。
    • バイナリはバイトからできています。
    • 1バイトは8ビットです。
    • バイトは0から255までの数値を表すことができます。
    • バイトを扱うときは、16進数の整数値がよく使われます。たとえば0x00から0xFFまでです。
  • バイナリリテラルは、<<>>という特殊形式を使って定義します。
    • バイトに255より大きい整数を使った場合、::演算子で使用する単位やサイズを指定しない限り、最後の8ビットだけが使われます。
  • <>/2を使うと、ビット列・バイナリ・文字列を連結できます。
<<255>> == <<0xFF>>
# Overflowing bits are truncated
<<256>> == <<0>>
<<256::size(16)>> == <<1, 0>>

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

_ヌルバイト_は<<0>>の別名です。

文字列はエンコードされたバイナリデータ

  • 文字列は、UTF-8形式でエンコードされたバイナリデータです。
    • 8ビット(1バイト)単位でエンコードされ、255文字を超える文字を表すには最大4バイト使います。
    • 文字列の長さは、そのバイトサイズと同じとは限りません。
# 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>>

バイナリデータのパターンマッチング

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

これは文字列でも同じようにできます。

# 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"}
GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

バイナリを学習する

練習はロックされています

バイナリを練習するには、あと1個の演習のロックを解除してください