erlang的位元語法(erlang bit syntax)提供了一種方法來匹配二進位制資料,這使得erlang二進位制物件在某種程度上等同於其他erlang物件,如元組和列表。也因為其快速高效,使得在erlang中,二進位制物件被廣泛使用,尤其是在協議程式設計方面。(官方文件)
erlang的位元語法表示式:
<<>>
<>
每個元素ei指定了一段二進位制串(bit string)。每個元素ei都是乙個值,後面可以帶有可選引數size、typespecifierlist
ei = value |
value:size |
value/typespecifierlist |
value:size/typespecifierlist
size表示前乙個value資料儲存的位數,預設是8位,也就是乙個位元組。
typespecifierlist可以是以下幾種型別及其組合,組合以 - 相連
type = integer | float | binary | bytes |bitstring | bits | utf8 | utf16 | utf32
預設值是integer。bytes是binary的簡寫,bits是bitsring的簡寫
signedness = signed | unsigned
只有當type為integer時有用,預設是unsigned
endianness = big | little | native
當type為integer,utf16,utf32,float有用,預設是big
unit = unit:integerliteral
有效範圍是1-256,integer、float和bitstring預設是1,binary預設是8
在官方文件找到以下一段**:
1>bin1 = <<1,17,42>>.<<1,17,42>>2>bin2 = <<"abc">>.<<97,98,99>>
3>bin3 = <<1,17,42:16>>.<<1,17,0,42>>
4><> = <<1,17,42:16>>.<<1,17,0,42>>
5>c.42
6><> = <<1,17,42:16>>.<<1,17,0,42>>
7>d.273
8>f.42
9><> = <<1,17,42:16>>.<<1,17,0,42>>
10>h.<<17,0,42>>
11><> = <<1,17,42:12>>.<<1,17,2,10:4>>
12>h.<<17,2,10:4>>
例子說明:
1、例子1和2:從一組常量或乙個字串來構造二進位制物件
1>bin1 = <<1,17,42>>.2>bin2 = <<"abc">>.以上生成的二進位制大小為3。binary_to_list(bin1) 得到 [1, 17, 42],binary_to_list(bin2) 得到[97, 98, 99]。數字常量是在0-255之間的整數,用8位儲存,如果超過這個範圍後面加:size來說明,如<<256:16>>。字元則會轉化為ascii碼。
2、例子3:從一組限定邊界的變數來構造二進位制物件
3>bin3 = <<1,17,42:16>>.以上生成的二進位制大小為4。
上面,我們給42指定了16位的大小來儲存,所以在記憶體中的資料為0000 0000 0010 1010,這樣構成出來的物件就是<<0, 42>>
3、例子4、6:按照某種形式匹配二進位制物件
4><> = <<1,17,42:16>>.6><> = <<1,17,42:16>>.例子4很好理解,這裡說一下例子6吧,為何d會得到273的結果?
<<1,17,42:16>>生成的二進位制資料前面說過了,為<<1,17,0,42>>
d:16表示匹配記憶體中16位的二進位制資料,所以的到就是<<1,17>>在記憶體中的資料,為0000 0001 0001 0001,結果就是256 + 16 + 1,也就是273
4、例子11:也是從一組限定邊界的變數來構造二進位制物件,和例子3不同的是大小不是8的倍數。
<<1,17,42:12>>.上面,我們給42指定了12位的大小來儲存,所以在記憶體中的資料為0000 0010 1010,
這樣構造出來的物件就是<<2,10:4>>
在erlang 二進位制中,物件預設以8位為乙個單位來表示,不足就向後面借位,比如:<<42:12,1,17>>生成的二進位制物件是<<2,160,17,1:4>>,其實兩者表達的是一段相同的二進位制資料。
Erlang筆記 二進位制 位元位語法
看erlang的語法看到二進位制處理部分覺都很有意思,做個記錄 存在於很多函式式程式語言之中的列表速構的思想,也被擴充套件到了erlang的位元位語法中。位串速構酷似列表速構,只是 被換成了 以乙個小整數列表為例,所有整數都在0和7之間,你可以按每個數3位元位將它們打包成位串,如下 x 3 x 1,...
erlang的基本語法
1 變數 1 erlang變數變數必須以大寫字母或者下劃線開頭,可以包含字母 下劃線和 2 變數只容許賦值一次 2 數字型別 1 b val表示以b進製儲存的數字val,比如 7 2 101.5二進位制儲存的101就是10進製的5了 8 8 101.65八進位制儲存的101就是10進製的65了 2 ...
erlang 符號相關基本語法
erlang語法約定 比較符opdescription equal to not equal to less than or equal to less than greater than or equal to greater than exactly equal to exactly not e...