9.Erlang 二進制操作

一,爲什麼使用二進制類型?

使用低級別的編程更加可靠,而且相比於元組和列表更加節省空間。有時候大量結構化的數據必須在計算機之間相互移動,我們就需要確保數據儘可能高效傳播,利用一切可以存儲的位置,每個位置儘可能含有較多的信息。

二,二進制類型

1.內置函數轉化二進制

1>A={test,1,2,3,[1,2,3]}.
{test,1,2,3,[1,2,3]}
2> Bin1=term_to_binary(A).
<<131,104,5,100,0,4,116,101,115,116,97,1,97,2,97,3,107,0,
  3,1,2,3>>
3> Term1=binary_to_term(Bin1).
{test,1,2,3,[1,2,3]}
4> B=[1,2].
[1,2]
5> Bin2=list_to_binary(B).
<<1,2>>
6> Lis1=binary_to_list(Bin2).
[1,2]
7> Lis1=binary_to_list(Bin1).
** exception error: no match of right hand side value
                    [131,104,5,100,0,4,116,101,115,116,97,1,97,2,97,3,107,0,3,
                     1,2,3]

2.判斷一個數據是不是二進制,可以使用is_binary

8> is_binary(Bin1).
true

3.提取出任意長度的二進制類型,使用split_binary

9> {Bin3,Bin4}=split_binary(Bin1,4).
{<<131,104,5,100>>,
 <<0,4,116,101,115,116,97,1,97,2,97,3,107,0,3,1,2,3>>}

4.可以直接書寫二進制

14> Bin1= <<1,2,3>>.
<<1,2,3>>
15> binary_to_list(Bin1).
[1,2,3]
16> binary_to_term(Bin1).
** exception error: bad argument
     in function  binary_to_term/1
        called as binary_to_term(<<1,2,3>>)
17> <<E,F>> =Bin1.
** exception error: no match of right hand side value <<1,2,3>>
18> <<E,F,G>> =Bin1.
<<1,2,3>>

5.二進制的表達Expr:Size/Type

Size:以指定過的大小爲單位,一個整數默認是8,浮點數數64(位)。

Type:一個類型說明符列表,並以連字符分隔,可以是如下內容

type——整數,浮點數,二進制,字節,位,串

sign——singed和unsigned,如果是sign,第一位0位正,1位負

endian——取決於CPU,默認是big,還有little和native。big表示第一字節是最低位,little第一字節最高位,運行的時候再確定是native

指定單位,比如unit:Val——使用的位的數目是Val*N,N是該值的大小,二進制和字節是8

22> <<Int1:2,Int2:6>> = <<128>>.
<<128>>
23> Int1.
2
24> Int2.
0
25> <<5:4/little-signed-integer-unit:4>>.
<<5,0>>

6.按位匹配

27> Bin= <<1,1:16>>.
<<1,0,1>>
28> <<D:16,F/binary>> =Bin.
<<1,0,1>>
29> [D,F].
[256,<<1>>]
33> Frame= <<1,3,0,0,1,0,0,0>>.
<<1,3,0,0,1,0,0,0>>
34> <<Type,Size,Bin:Size/binary-unit:8,_/binary>> =Frame.
<<1,3,0,0,1,0,0,0>>
35> Type.
1
36> Size.
3
37> Bin.
<<0,0,1>>
38> Size.
3

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章