Erlang 位元語法(Bit Syntax)

2021-09-01 19:39:53 字數 2627 閱讀 7591

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...