第5章 顺序型编程进阶
1. 所有的BIF都在erlang模块中,大部分常用的BIF都已被自动导入(也就是说还有一些不常用的没有自动导入)。
2. 二进制数据相对于元组和列表,它更加节省内存,输入输出更加高效。
3. 在书写和打印时,二进制数据用一组以<<和>>括起来的整数或字符序列的形式出现。
如:<<5,10,20>>. <<"hello">>
整数要在0-255之间,字符相当于其对应的ASCII码。
4. 可以通过BIF或二进制语法来构造或提取二进制数据。
5. 操纵二进制数据的BIF
@spec list_to_binary(IoList) -> binary()
其中IoList是一个列表,其中的元素可以是0~255的整数、二进制数据或者另外一个IoList。亦即IoList可以是一个嵌套的列表。
@spec split_binary(Bin, Pos) -> {Bin1, Bin2}
从Pos位置将Bin分成两部分。如果是从1开始的话,第Pos个元素被分在了Bin1中。
@spec term_to_binary(Term) -> Bin
可以将任何一个Erlang值转化为二进制数据。转化成的数据可以保存在文件中,通过网络发送等。(如何发送的C写的程序的话,C程序如何解析呢?)
@spec binary_to_term(Bin) -> Term
term_to_binary的逆函数。
@spec size(Bin) -> Int
返回二进制数据的长度。
6. 比特语法
<<E1, E2, ..., En>>
Ei = Value | %% Size省略时整数是8位,浮点型是64位
Value:Size | %% Size代表单元区块的长度,有可能有多个区块(Unit),整个区块的长度Size*Unit
Value/TypeSpecifierList |
Value:Size/TypeSpecifierList
TypeSpecifierList是一个由连字符(-)间隔的形如End-Sign-Type-Unit的列表。
《Erlang程序设计》学习笔记-第5章 顺序型编程进阶
最新推荐文章于 2015-11-14 12:19:11 发布
其中@type End = big | little | native 默认值是big
@type Sign = signed | unsigned 默认值是unsigned
@type Type = integer | float | binary 默认值是integer
@Unit = 1|2|...|255 当Type是integer或float时,Unit的默认值是1; 当Type是binary,Unit的默认值是8
7. 测试本机的整数表示法:
{<<16#12345678:32/big>>, <<16#12345678:32/little>>, <<16#12345678:32/native>>, <<16#12345678:32>>}
8. 如果I是一个整数,<<I:32>>可以将I转换一个32位长的二进制数据。
9. apply(Mod, Func, [Arg1, Arg2, ..., ArgN])调用Mod模块中的Func函数,Arg1~ArgN是Func的参数。apply的好处是可以动态改变模块和函数。
10. 预定义属性:(-record()和-include()不是属性&#x