Erlang 编程/位语法
外观
Erlang 允许我们使用位串。它们具有以下形式
<<Value:Bitlength>> or <<v1:length1,v2:length2,...>>
默认位长度为 8。
65> <<1:8>> == <<1>>. true
位串中使用的整数可以在左侧用零填充。
66> <<1:8>> == <<00000001>>. true
一些位串具有字符串表示形式。
38> <<00011111>>. <<"g">>
请记住,使用默认位长度会导致过大整数被截断!
39> <<"g">> == <<103>>. true 40> <<00011111>> == <<103>>. true 41> <<00011111:8>> == <<103>>. true 42> <<00011111:16>> == <<43, 103>>. true 43> <<00011111:24>> == <<0, 43, 103>>. true 44> <<00011111:32>> == <<0, 0, 43, 103>>. true
我们无法使用整数指定单个位。我们必须使用位长度为 1 的值。
67> <<0101>>. <<"e">> 68> <<1:1, 0:1, 1:1>>. <<5:3>> 69> <<0101>> == <<1:1, 0:1, 1:1>>. false 70> <<101>> == <<1:1, 0:1, 1:1>>. false 71> <<1:1, 0:1, 1:1>> == <<5:3>>. true 72> <<0:5, 1:1, 0:1, 1:1>>. <<5>> 73> <<0:5, 1:1, 0:1, 1:1>> == <<0101>>. false
我们可以使用模式匹配选择位串的一部分。
45> <<H:2,T:6>> = <<"A">>. <<"A">> 46> H. 1 47> T. 1 86> <<01000001:8>> == <<"A">>. true 87> <<1:2,1:6>> == <<"A">>. true 88> <<65>> == <<"A">>. true
我们可以将 X 与值匹配。
95> <<1:2,X:6>> = <<"A">>. <<"A">> 96> X. 1
我们无法将 Y 与位长度匹配。
97> <<1:2,1:Y>> = <<"A">>. ** 1: variable 'Y' is unbound **
我们可以使用绑定变量作为位长度。
98> Z = 6. 6 99> <<1:2,X:Z>> = <<"A">>. <<"A">> 100> X. 1