[置顶] 通信协议中多字节数据的解析
2013-08-29 18:40
525 查看
在自定义通信协议中,如果采用字节流形式的的方式。就特别注意多字节数据的解析。此处以整形数据为例进行讲解。
例如:通信协议中规定整个数据帧长度为整形,占用两个字节。
则数据帧长度257转化为字节数组为:byte[0]=2,byte[1]=1,发送数据时先发送字节byte[0],再发送字节byte[1]
则在服务端解析时,计算的数据的正确方式就是byte[0]+byte[1]*256=258,错误的为byte[0]*256+byte[1]=513
相反如果客户端先发送byte[1],在发送byte[0],则在服务端解析式的正确方式就是byte[0]*256+byte[1]=258,错误的为byte[0]+byte[1]*256=513
如果这些细节没有严格规定,就会导致解析错误。
这些都是需要注意的细节,虽然琐碎,但不注意却会导致解析失败。
因此字节流通信协议双方必须严格按照通信协议处理数据。通信协议必须规定每一个字节的含义,以及多字节数据的存储顺序,否则就会导致解析错误。
几个常用的数值转换字节数组的函数:
例如:通信协议中规定整个数据帧长度为整形,占用两个字节。
则数据帧长度257转化为字节数组为:byte[0]=2,byte[1]=1,发送数据时先发送字节byte[0],再发送字节byte[1]
则在服务端解析时,计算的数据的正确方式就是byte[0]+byte[1]*256=258,错误的为byte[0]*256+byte[1]=513
相反如果客户端先发送byte[1],在发送byte[0],则在服务端解析式的正确方式就是byte[0]*256+byte[1]=258,错误的为byte[0]+byte[1]*256=513
如果这些细节没有严格规定,就会导致解析错误。
这些都是需要注意的细节,虽然琐碎,但不注意却会导致解析失败。
因此字节流通信协议双方必须严格按照通信协议处理数据。通信协议必须规定每一个字节的含义,以及多字节数据的存储顺序,否则就会导致解析错误。
几个常用的数值转换字节数组的函数:
/// <summary> /// 把数字转化为数组 地位存低字节,高位存高字节 /// </summary> /// <param name="x"></param> /// <param name="length"></param> /// <returns></returns> static byte[] IntToBytes(int x, int length) { byte[] b = new byte[length]; int temp = x; for (int i = 0; i <= length - 1 && i < 4; i++) { b[i] = (byte)((x >> (i * 8))); } return b; } /// <summary> ///把数组转化为数字 解析地位存低字节,高位存高字节 /// </summary> /// <param name="b"></param> /// <param name="length"></param> /// <returns></returns> static int BytesToInt(byte[] b, int length) { int temp = 0; for (int i = 0; i <= length - 1 && i < 4; i++) { temp += (int)(b[i] << (i * 8)); } return temp; }
相关文章推荐
- 通信协议中多字节数据的解析
- 通信协议 数据写入字节数组的辅助类ProtocolHelper2
- HTTP(二)http协议通信步骤及数据解析
- 铁路列车之间的通信协议(MVB协议)分析软件C/C++实现(四) 数据解析
- C# 串口操作系列(3) -- 协议篇,二进制协议数据解析 (转帖)
- 数据通信之数据转码字节映射加密发送:客户端c++和服务器java
- 网络协议解析数据设计和excel辅助生成代码
- [置顶] HttpURLConnection Handler PULL解析数据 listView 版本更新
- TCP/IP学习笔记二:地址解析协议ARP 数据格式
- c#网络通信框架networkcomms内核解析之五 数据监听
- Android网络开发中如何使用JSON进行网络通信---Android_JSON数据通讯方法解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- Netty实现按字节解析的socket协议
- Ubuntu下GCC之libpcap库数据库通信协议解析基础框架代码
- 网络通信时整型数据与字节之间的转换
- C# 串口操作系列(3) -- 协议篇,二进制协议数据解析
- [置顶] pull解析请求网络的数据(带分页加载,刷新) xlistview HttpUtils
- [置顶] 动态grid java 后台封装json数据返回到前台解析并展示
- MAVLink协议通信分析——(三)消息解析
- [置顶] JVM--解析Java内存区域及数据的内存分配与线程安全之间的一些联系