博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
位语法
阅读量:7117 次
发布时间:2019-06-28

本文共 1191 字,大约阅读时间需要 3 分钟。

目的:针对协议编程而设计,可以方便快捷的处理协议的封包和解包

位语法:Bin = <<E1, E2, E3,  ....,En>>

位模式匹配:    <<E1, E2, E3, ....,En>> = Bin

En形式可以为如下形式:

Data    |

Data:Size  |

Data/TypeSpecifiers  |

Data:Size/TypeSpecifiers

说明:

Data必须是文本串,整数,浮点数或另外一个位串,

Size指明区块长度,默认值取决于区块类型,整型长度为8,浮点型长度为64,二进制数据为其本身长度

TypeSpecifiers是一个形如End-Sign-Type-Unit的列表,这几项顺序无要求,且可以省略,若省略则用默认值

End指定字节序,可取值为big|little|native, 默认为big,native表示运行时决定;Sign可取值为signed|unsigned,Type可取值为

二进制数据中的总位数必须恰好能被8整除

二进制数据中用到的整数,必须是0到255之间的整数,否则会被截断,所以<<254,255,256,257>> 就变成了<<254,255,0,1>>

对于字符串来说,如果二进制数据时可打印字符串,则在显示的时候,会以字符串方式显示,否则会显示为一串整数

知识扩展:

  大端序big-endian

    数据的高位存放在地址的低端,低位存放在地址的高端

  小端序little-endian

    数据的高位存放在地址的高端,低位存放在地址的低端

  字节的高位与低位,

    从左到右,由高到低

           举例说明:

    int a = 0x12345678

           那么左边的0x12就是高位字节,右边的0x78就是低位字节

看看两种方式如何存储数据,假设从地址0x00000001处开始存储十六进制数0x12345678,那么

Bit-endian 如此存放(按原来顺序存储)

0x00000001           -- 12

0x00000002           -- 34

0x00000003           -- 56

0x00000004           -- 78

Little-endian 如此存放(颠倒顺序储存)

0x00000001           -- 78

0x00000002           -- 56

0x00000003           -- 34

0x00000004           -- 12

一个很好的记忆方法是,大端序是按照数字的书写顺序进行存储的,而小端序是颠倒书写顺序进行存储的。

 

因此

输入:<<16#12345678:32/big>>.

输出:<<18,52,86,120>>

输入:<<16#12345678:32/little>>.

输出:<<120,86,52,18>>

 

 

 

 

转载于:https://www.cnblogs.com/wangjunshusheng/p/3300223.html

你可能感兴趣的文章
Android线程之Looper
查看>>
使用Codeblock搭建Windows下Objec-c学习环境
查看>>
Spring MVC 中 HandlerInterceptorAdapter的使用--转载
查看>>
Knockout应用开发指南 第五章:创建自定义绑定
查看>>
php 字符串截取
查看>>
VS2010 正则批量替换头文件路径
查看>>
关于git CRLF LF结尾的问题
查看>>
10、ASP.NET MVC入门到精通——Model(模型)和验证
查看>>
转:ios review推送与执行
查看>>
HTML,CSS,font-family:中文字体的英文名称 (宋体 微软雅黑)
查看>>
观察者模式
查看>>
iOS应用内语言切换功能
查看>>
如何写好一个UITableView
查看>>
上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?...
查看>>
NET Core-TagHelper实现分页标签
查看>>
Cesium原理篇:6 Renderer模块(1: Buffer)
查看>>
defered,promise回顾
查看>>
svn提交时出现很多乱文件怎么解决
查看>>
std::unique_lock<std::mutex> or std::lock_guard<std::mutex> C++11 区别
查看>>
SQL - ROW_NUMBER,Rank 添加序号列
查看>>