Erlang(8):二进制型与位语法

大多数情况下,二进制型里的位数都会是8的整数倍,因此对应一个字节串。
如果位数不是8的整数倍,就称这段数据为位串。
二进制型的编写和打印形式是双小于号和双大于号之间的一列整数或字符串
2> <<5,10,20>>.
<<5,10,20>>
3> <<"Hello Fable!">>.
<<"Hello Fable!">>

操作二进制型
binary模块
list_to_binary(L)->B 把io列表(iolist)L里的素有元素压扁后形成的二进制
split_binary(Bin,Pos)->{Bin1,Bin2} 在pos处把二进制型Bin一分为二
term_to_binary(Term)->Bin 把任何erlang数据类型转换成二进制型。
binary_to_term(Bin)->Term 将二进制型转回来
byte_size(Bin)->Size 返回二进制型的字节数

位语法 
用于从二进制数据里提取或加入单独的位或者位串。
用于协议编程以及生产操作二进制数据的高效代码。
如果是8的整倍,类型就是binary。如果不是,就是bitstring
M = <<X:N1,Y:N2,Z:N3>> %XYZ都是变量,N1N2N3都是各自所占的位数。
<<X:N1,Y:N2,Z:N3>> = M %读取M中的数据到XYZ,跟上面的完全想法的操作。
<<>>
<<E1,E2,...,En>>

单个Ei元素可以有4种形式:
Ei = Value |
	 Value:Size |
	 Value/TypeSpecifierList | 
	 Value:Size/TypeSpecifierList
	 TypeSpecifierList 类型指定列表 End-Sign-Type-Unit
	 End可以是big| little | native
	 Sign可以是signed|unsigned Type可以是integer|float|binary|bytes|bitstring|bits|utf8|utf16|utf32默认值是integer
	 Unit的写法是unit:1|2|...256

位推导:

[ X || <<X:N>> <= B]. %列表
<< <<X>> || <<X:N>> <= B >>. %位串



posted @ 2017-01-17 15:14  肥宝游戏  阅读(376)  评论(0编辑  收藏  举报