`
langzhe
  • 浏览: 286397 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

erlang The Bit Syntax 学习

阅读更多

 

爷爷在书上是这样描述的

The bit syntax is an extension to pattern matching used for extracting
and packing individual bits or sequences of bits in binary data. When
you’re writing low-level code to pack and unpack binary data at a bit
level, you’ll find the bit syntax incredibly useful. The bit syntax was
developed for protocol programming (something that Erlang excels at)
and produces highly efficient code for packing and unpacking protocol
data.
Suppose we have three variables—X, Y, and Z—that we want to pack
into a 16-bit memory area in a variable M. X should take 3 bits in the
result, Y should take 7 bits, and Z should take 6. In most languages
this involves some messy low-level operations involving bit shifting and
masking. In Erlang, you just write the following:
M = <<X:3, Y:7, Z:6>>
Easy!

Eshell V5.7.4  (abort with ^G)
1> X =1.
1
2> Y=2.
2
3> Z=3.
3
4> M = <<X:2,Y:2,Z:6>>.   
<<96,3:2>>
5> <<X1:2,Y1:1,Z1:7>> = M.
<<96,3:2>>
6> Z1.
3
7> Y1.
1
8> X1.
1
9> <<X2:2,Y2:7,Z2:1>> = M.
<<96,3:2>>
10> Z2.
1
11> Y2.
65
12> X2.
1
13> 
14>  <<X3:2,Y3:2,Z3:6>> = M.
<<96,3:2>>
15> Z3.
3
16> Y3.
2
17> X3.
1


过了一把隐,Z3,Y3,X3 解析出来 的值与 Z,Y,X是一样的 其他的不对,因为“位数”变化了
继续往下看发现这么一段话
Whatever form you use, the total number of bits in the binary must be
evenly divisible by 8。
郁闷了 我的位数不是8的倍数,
4> M = <<X:2,Y:2,Z:6>>. 我这里总共是 2+2+6 =10 并不是8的倍数 
*大头(82400***) 15:35:17
01100000,11 
*大头(82400***) 15:35:49
所以有2个bit裸奔了 (可以操作裸奔的位,也就是不是8的倍数的剩下的位)
*大头(82400***) 15:36:02
3:2就是这个意思,后面的11 



Bit Syntax Expressions
Bit syntax expressions are of the following form:
<<>>
<<E1, E2, ..., En>>
Each element Ei specifies a single segment of the binary. Each element
Ei can have one of four possible forms:
Ei = Value |
Value:Size |
Value/TypeSpecifierList |
Value:Size/TypeSpecifierList
Whatever form you use, the total number of bits in the binary must be
evenly divisible by 8. (This is because binaries contain bytes that take
up 8 bits each, so there is no way of representing sequences of bits
whose length is not a multiple of 8.)


 

 

0
1
分享到:
评论

相关推荐

    erlang-syntax_tools-19.3.6.4-1.el7.x86_64.rpm

    erlang-syntax_tools-19.3.6.4-1.el7.x86_64.rpm

    介绍 Erlang binary 和 bit string 数据类型的经典文章

    ### Erlang Binary与Bit String 数据类型详解 #### 引言 Erlang 是一种功能强大且灵活的编程语言,尤其适合开发高并发、分布式及容错性应用。自 R12B 版本以来,Erlang 在处理二进制数据方面引入了两项重大更新:...

    Erlang Syntax For Notepad++

    "Erlang Syntax For Notepad++" 是一个专门为Notepad++设计的插件或配置文件,目的是为Erlang源代码提供色彩丰富的语法高亮显示。这对于开发者来说极其重要,因为颜色编码可以帮助提高代码可读性和理解性,使得...

    erlang学习相关资料

    Joe的那篇erlang论文 Programming Erlang + 源码包 Erlang Programming Concurrent Programming in Erlang efficiecy guide 资源齐全.希望能帮到你.

    Erlang OTP 20.1 Windows 64-bit Binary File

    Erlang OTP 20.1 Windows 64-bit Binary File 下载地址:http://www.erlang.org/downloads

    erlang学习资料

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信...总的来说,Erlang的学习涉及函数式编程思想、并发处理、分布式系统设计等多个方面,深入学习并实践这些知识点,将使你具备开发高效、可靠的并发应用程序的能力。

    Erlang游戏程序学习完整PDF手册

    这份"Erlang游戏程序学习完整PDF手册"是一份全面介绍Erlang在游戏开发中应用的学习资料,包含了Erlang的基础知识、并发原理以及在游戏开发中的实践案例。 Erlang语言的设计理念源自于Ericsson公司为解决电信系统中...

    Erlang语音学习资料汇总

    资源名称:Erlang语音学习资料汇总资源目录:【】Erlang程序设计【】[ManningPublications]ErlangandOTPinAction【】[NoStarchPress]LearnYouSomeErlangforGreatGood!ABeginner'sGuide【】[O'ReillyMedia]...

    erlang入门学习经典资料(很不错)

    ### Erlang 入门学习经典资料解析 #### Erlang 的神秘与起源 Erlang,作为一门相对小众但极具特色的编程语言,自问世以来便伴随着一种神秘的气息。这种神秘感不仅源于它独特的编程范式——函数式编程,还在于其...

    erlang 连接学习例子

    在这个“erlang 连接学习例子”中,我们有两个核心文件:`server.erl` 和 `client.erl`,它们分别代表了一个服务器进程和客户端进程,展示了Erlang中进程间的通信机制。 `server.erl` 文件通常包含一个持续运行的...

    Erlang学习资料

    ### Erlang多核编程入门知识点总结 #### 一、Erlang多核编程背景与重要性 - **多核时代的来临**:随着技术的发展,单个芯片内部的...通过学习和掌握Erlang的多核编程技巧,开发者可以更加从容地面对多核时代的挑战。

    erlang编程 Introducing Erlang

    Simon St. Laurent的《Introducing Erlang》这本书深入浅出地介绍了这些概念,是学习Erlang的理想起点。通过阅读这本书,读者将能够理解Erlang如何处理并发、分布式计算和故障恢复,从而构建高效、健壮的软件系统。

    Erlang并发编程,Erlang程序设计,Erlang中文手册

    学习erlang的好资料。  Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。 使用...

    xiandiao_erlang_Erlang课后习题_

    "xiandiao_erlang_Erlang课后习题_"这个压缩包文件包含了Erlang程序设计第二版的课后习题源码,这对于学习和深入理解Erlang编程至关重要。 Erlang的特点: 1. **函数式编程**:Erlang基于函数式编程范式,强调无副...

    Erlang官网下载过慢

    Erlang是一种面向并发的、函数式编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。在IT行业中,Erlang因其强大的实时性和处理大量并发连接的能力而被广泛应用于电信、互联网基础设施和实时系统。RabbitMQ...

    Erlang编程中文学习手册.pdf

    根据提供的文件信息,这份Erlang编程中文学习手册涵盖了Erlang编程语言的基础知识和一些进阶内容,旨在帮助读者从入门到初中级水平的提升。以下是手册中提到的Erlang编程的相关知识点。 首先,手册介绍了Erlang语言...

    erlang资源

    这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入理解和学习Erlang语言的关键资料。 《Erlang并发编程》这本书可能涵盖了以下知识点: 1. **并发模型**:Erlang的并发...

    erlang_win64.rar

    掌握这些基础知识后,你可以进一步学习如何在Erlang中编写RabbitMQ客户端,实现消息的发布和订阅,以及如何利用RabbitMQ实现可靠的数据传输和系统解耦。同时,了解Erlang的错误处理机制和调试工具,如observer和...

Global site tag (gtag.js) - Google Analytics