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 >>. %位串
相关文章
相关标签/搜索