Erlang的比特语法(Erlang Bit Syntax)提供了一种方法来匹配二进制数据,这使得Erlang二进制对象在某种程度上等同于其他Erlang对象,如元组和列表。也因为其快速高效,使得在Erlang中,二进制对象被广泛使用,尤其是在协议编程方面。(官方文档)
Erlang的比特语法表达式:
<<>>
<<E1,...,En>>
每个元素Ei指定了一段二进制串(bit string)。每个元素Ei都是一个值,后面可以带有可选参数Size、TypeSpecifierList
Ei = Value |
Value:Size |
Value/TypeSpecifierList |
Value:Size/TypeSpecifierList
Size表示前一个Value数据存储的位数,默认是8位,也就是一个字节。
TypeSpecifierList可以是以下几种类型及其组合,组合以 - 相连
Type = integer | float | binary | bytes |bitstring | bits | utf8 | utf16 | utf32
默认值是integer。bytes是binary的简写,bits是bitsring的简写
Signedness = signed | unsigned
只有当type为integer时有用,默认是unsigned
Endianness = big | little | native
当type为integer,utf16,utf32,float有用,默认是big
Unit = unit:IntegerLiteral
有效范围是1-256,integer、float和bitstring默认是1,binary默认是8
在官方文档找到以下一段代码:
1> Bin1 = <<1,17,42>>.
<<1,17,42>>
2> Bin2 = <<"abc">>.
<<97,98,99>>
3> Bin3 = <<1,17,42:16>>.
<<1,17,0,42>>
4> <<A,B,C:16>> = <<1,17,42:16>>.
<<1,17,0,42>>
5> C.
42
6> <<D:16,E,F>> = <<1,17,42:16>>.
<<1,17,0,42>>
7> D.
273
8> F.
42
9> <<G,H/binary>> = <<1,17,42:16>>.
<<1,17,0,42>>
10> H.
<<17,0,42>>
11> <<G,H/bitstring>> = <<1,17,42:12>>.
<<1,17,2,10:4>>
12> H.
<<17,2,10:4>>
例子说明:
1、例子1和2:从一组常量或一个字符串来构造二进制对象
1> Bin1 = <<1,17,42>>.
2> Bin2 = <<"abc">>.
以上生成的二进制大小为3。binary_to_list(Bin1) 得到 [1, 17, 42],binary_to_list(Bin2) 得到[97, 98, 99]。数字常量是在0-255之间的整数,用8位存储,如果超过这个范围后面加:Size来说明,如<<256:16>>。字符则会转化为ASCII码。
2、例子3:从一组限定边界的变量来构造二进制对象
3> Bin3 = <<1,17,42:16>>.
以上生成的二进制大小为4。
上面,我们给42指定了16位的大小来储存,所以在内存中的数据为0000 0000 0010 1010,这样构成出来的对象就是<<0, 42>>
3、例子4、6:按照某种形式匹配二进制对象
4> <<A,B,C:16>> = <<1,17,42:16>>.
6> <<D:16,E,F>> = <<1,17,42:16>>.
例子4很好理解,这里说一下例子6吧,为何D会得到273的结果?
<<1,17,42:16>>生成的二进制数据前面说过了,为<<1,17,0,42>>
D:16表示匹配内存中16位的二进制数据,所以的到就是<<1,17>>在内存中的数据,为0000 0001 0001 0001,结果就是256 + 16 + 1,也就是273
4、例子11:也是从一组限定边界的变量来构造二进制对象,和例子3不同的是大小不是8的倍数。
<<1,17,42:12>>.
上面,我们给42指定了12位的大小来存储,所以在内存中的数据为0000 0010 1010,
这样构造出来的对象就是<<2,10:4>>
在erlang 二进制中,对象默认以8位为一个单位来表示,不足就向后面借位,比如:<<42:12,1,17>>生成的二进制对象是<<2,160,17,1:4>>,其实两者表达的是一段相同的二进制数据。
分享到:
相关推荐
在Erlang里面,Binary支持强大的模式匹配,这为编写网络通讯程序提供了便利。但是关于 bit syntax 语法来说,理解还是不太容易。 借此文档,希望给大家有帮助。
NULL 博文链接:https://zhoujun.iteye.com/blog/845650
notepad++上erlang的语法着色文件
vim-erlang-runtime, Vim的Erlang缩进和语法 用于Vim的Erlang缩进和语法这是 Vim ( 来自 Vim 7.4 ) 附带的Erlang缩进和语法。安装方法 1克隆这里存储库: $ mkdir -p ~/.vim/bundle $ cd ~/.vim/b
erlang-syntax_tools-19.3.6.4-1.el7.x86_64.rpm
Erlang OTP 20.1 Windows 64-bit Binary File 下载地址:http://www.erlang.org/downloads
语法检查器当前支持erlang源文件(.erl),erlang头文件(.hrl),erlang配置(.config,.rel,.script,.app,.app.src),escript文件(.erl,.escript) ,.es),leex文件(.xrl)和yecc文件(.yrl)。...
《erlang编程指南》是对erlang语言的深入介绍。erlang是任何必须并发、容错和快速响应的环境的理想编程...本书的重点集中在解释erlang的语法和语义,并且介绍了其模式匹配、规范列表、递归、调试、网络和并发性等内容。
Do :这为 Erlang 添加了对do -syntax 和 monads 的支持。 它们深受启发,monad 和库是来自 Haskell GHC 库的近乎机械的翻译。 导入为:这增加了对将远程函数导入当前模块命名空间的支持,并显式控制本地函数名称...
Erlang is the language of choice for programmers who want to write robust, concurrent applications, but its strange syntax and functional design can intimidate the uninitiated. Luckily, there's a new ...
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
erlang 安装包
书中从Erlang的基础知识讲起,融汇所有的基本概念和语法。 这是一本讲解Erlang编程语言的入门指南,内容通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从Erlang的基础知识讲起,融汇所有的基本概念和...
vim-erlang-编译器vim-erlang-compiler是Vim的Erlang语法检查和编译器插件。目录安装Vim的内置软件包管理器如果您至少使用Vim 8并且不使用其他软件包管理器,则这是推荐的安装方法。 有关Vim内置软件包管理器的信息...
Erlang及其应用Erlang及其应用Erlang及其应用
该存储库包含 Vim 附带的用于 Erlang 编程语言的缩进、语法和 ftplugin 脚本。 在这里您可以下载最新版本并做出贡献。 目录 安装 Vim 的内置包管理器如果您至少使用 Vim 8 并且不使用其他包管理器,则这是推荐的安装...
ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)
erlang25.0 windows版本