iex> "hello" <> <<0>>
iex> IO.inspect("hełło", binaries: :as_binaries)
<<104, 101, 197, 130, 197, 130, 111>>
<<>>::n或 ::size(n)方法来声明要用几个字节来表示一个数字iex(25)> <<42>>
"*"
iex(26)> <<42>> == <<42::8>>
true
一个Binary是一个由8位组成的 Bitstring 串,这意味着所有的binary都是bitstring,但是反之,并不是所有的bitstring都是binary。
is_bitstring/1 :判断是否为bitstring
is_binary/1:判断是否为binary
binary 和 bitstring 可以使用模式匹配
iex(1)> <<0, 1, x>> = <<1, 2, 3>>
** (MatchError) no match of right hand side value: <<1, 2, 3>>
iex(1)> <<0, 1, x>> = <<0, 1, 3>>
<<0, 1, 3>>
iex(2)> x
3
iex(3)>
binary-size(n) 可以匹配 n 个字节,binary模式匹配
iex(3)> <<head::binary-size(2), rest::binary>> = <<1, 2, 3, 4>>
<<1, 2, 3, 4>>
iex(4)> head
<<1, 2>>
iex(5)> rest
<<3, 4>>
<>,为binary模式匹配
<: head为 utf8 模式匹配,rest 为 binary 模式匹配
iex(1)> <<head, rest::binary>> = "banana"
"banana"
iex(2)> head
98
iex(3)> head == "b"
false
iex(4)> head == ?b
true
iex(5)> rest
"anana"
iex(6)>
charlist 有2种展现方式,一个是整数list,另外一个是''单引号包裹的字符串;
charlist 是一个整数的list,list里的整数全部对应着有效的code points。
""双引号表示string,chalist literals 用''单引号表示
一个charlist 包含整数code points,但是在打印时显示的是ASCII 范围内的单引号格式的code points
iex(21)> [104, 101, 108, 108, 111]
'hello'
iex(22)> is_list('hello')
true
将整数按照code point解释,总能让我们发现一些不可思议的行为。举个例子,如果你存储一个整数的list,其中所有的数值都在0-127范围内;iex默认会将这个list解释为一个charlist,并且将会展成对用的ASCII字符
<> string可以使用 <> 操作符进行拼接,charlist 只能使用 ++ 操作符进行拼接。