涉及到通信的地方就会需要通信协议,因为只有确定了通信协议,通信双方才能理解对方所发来的数据有什么含义。BER(Basic Encoding Rule)是一种编码规格说明,描述如何将ASN.1类型的值编码成字符串(string of octets)的方法。BER的数据都是由三个域构成:标识域(Tag)+长度域(Length)+值域(Value),简称TLV格式。

1. TLV 简介

TLV 是一种可变的格式,其中:T 可以理解为 Tag 或 Type ,用于标识标签或者编码格式信息;

L 定义数值的长度;

V 表示实际的数值。

T 和 L 的长度固定,一般是2或4个字节,V 的长度由 Length 指定。

2. 字节序

要正确的解析对方发来的数据除了统一数据格式之外还要统一字节序。字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。字节序一般分为大端和小端。

2.1 大端和小端

大端模式(Big-Endian): 高位字节放在内存的低地址端,低位字节排放在内存的高地址端。

小端模式(Little-Endian): 低位字节放在内存的低地址端,高位字节放在内存的高地址端。

下面举个例子,要把0x1234 存放在 0x2000 地址处,那么大端模式和小端模式存放方式如下:

2.2 网络字节序

网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用Big-Endian排序方式。

为了进行转换 bsd socket提供了转换的函数 有下面四个htons 把unsigned short类型从主机序转换到网络序

htonl 把unsigned long类型从主机序转换到网络序

ntohs 把unsigned short类型从网络序转换到主机序

ntohl 把unsigned long类型从网络序转换到主机序

3. 编解码

假设 Tag(或 Type)和 Length 都是 4字节表示(unsigned long)。

3.1 编码步骤使用 htonl 将 Tag(或Type)转成网络字节序,指针偏移 4;

使用 htonl 将 Length 转成网络字节序,指针偏移 4;

若值 Value 为 int、char、short、long 类型,将其转为网络字节序,指针偏移;若值为字符串,写入后指针偏移 Length;

重复上述三步,继续编码后面的 TLV 单元。

3.2 解码步骤读取 Tag(或Type)并使用 ntohl 将其转成主机字节序,指针偏移4;

读取 Length ntohl** 将其转成主机字节序,指针偏移4;

根据得到的长度读取 Value,若为 int、char、short、long 类型,将其转为主机字节序,指针偏移;若值为字符串,读取后指针偏移 Length;

重复上述三步,继续读取后面的 TLV 单元。

参考链接:

计算机tlv简介_TLV编码格式详解相关推荐

  1. 计算机tlv简介_TLV 格式及编码

    TLV 格式及编码 几乎所有的需要在卡片和终端之间传送的数据都是 TLV 格式的 . PBOC 文档里并没有对 TLV 编码细节做具体说明 , 而 EMV 的手册里虽有叙述, 但并不详细 . 我下面就 ...

  2. FTP服务的简介和配置详解

    FTP服务的简介和配置详解 注意:配置FTP服务时,最好关闭防火墙和selinux 1.FTP服务简介 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为& ...

  3. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  4. Android OkHttp3简介和使用详解

    一 OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpC ...

  5. java字符编码详解_Java中字符编码格式详解

    一.前言 在分析Comparable和Comparator的时候,分析到了String类的compareTo方法,String底层是用char[]数组来存放元素,在比较的时候是比较的两个字符串的字符, ...

  6. 计算机三级网络技术知识点cn,计算机等级三级网络技术考试详解

    首页 > 办公休闲手游 计算机等级三级网络技术考试详解 一.基本知识 1.具有计算机软件及 应用的基本知识 2.掌握操作系统的基 本知识 3.掌握计算机网络的基本概念与基 本工作原理 4.掌握I ...

  7. 计算机组成原理课设题目详解

    计算机组成原理课设题目详解 一.实验一 1.实验名称: 验证74LS181运算和逻辑功能 2.实验目的: (1) 掌握算术逻辑单元(ALU)的工作原理: (2) 熟悉简单运算器的数据传送通路: (3) ...

  8. 计算机三级网络技术大题详解,教你快速拿到60分,附三级题库绿色免安装

    计算机三级大题,详解,通俗易懂 博主今天亲自参加了NCRE的三级网络技术,感觉题目还可以,现在迫不及待的给你们大家分享了自己在网上找的资源,感觉大题就是这些题中的几道,覆盖的特全面,再次声明这个是我在 ...

  9. 学计算机基础word题,大学计算机基础word练习题及详解答案.doc

    大学计算机基础word练习题及详解答案 操作要求 1. 对正文进行排版,其中: (1)章名使用样式"标题1",并居中: 编号格式为:第X章,其中X为自动排序.(本小题1分) (2) ...

最新文章

  1. 数据库------求职必看
  2. 浅谈依赖注入与控制反转
  3. RUP大讲堂(第三讲):如何建立软件产品的愿景
  4. 嵌入式软件开发注意事项一
  5. dataframe合并两个表_Pandas 数据处理 | 怎么对多个数据表合并,你了解么?
  6. 3种时间复杂度实现不同类型的无序数组去重
  7. Javascript之把网页加入收藏夹功能
  8. 测试用例和缺陷报告模板
  9. 什么音频剪辑软件好用?
  10. 报计算机用几寸照片,在电脑显示的2寸照片的大小是几×几?
  11. matlab中黄金分割法,优化算法之黄金分割算法 - Matlab
  12. 详解安卓辅助功能服务AccessibilityService(无障碍服务,微信抢红包助手原理)
  13. 1034 Head of a Gang
  14. 上汽赛可携手几维安全 赋能移动出行安全新业态
  15. APS54085 外围电路简单_调光无频闪 智能家居照明
  16. 自由职业一时爽,一直自由一直爽
  17. layui框架学习(1:布局)
  18. Day25:Python基础编程(函数)能力训练50天——回文数
  19. 杰理之唤醒源获取【篇】
  20. My97DatePicker时间控件使用

热门文章

  1. postgresql9.5.9相关的日志文件介绍
  2. 深入理解JavaScript中的闭包
  3. hive on tez集成完整采坑指南(含tez-ui及安全环境)
  4. 时序分析基本概念介绍——SDC概述
  5. java中的远程debug调试
  6. 吴恩达深度学习作业L1W2:ValueError: cannot reshape array of size 12288 into shape (50,1)
  7. 图像处理(MATLAB及FPGA)实现基础原理(持续更新)
  8. OpenStack-Icehouse(nova-network)多节点基础环境部署
  9. 东大14春学期《计算机应用基础》在线作业1,东大18春学期《计算机应用基础》在线作业...
  10. javascript在IE和Firefox中兼容性问题