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