按自定义协议格式生成二进制字节数组的一种方式
2011-09-29 10:49
369 查看
在进行网络通讯时,一方需要向另一方传输数据,这些数据可以是一些值,一条语句,一个数组。
在C#使用Socket类实现通讯,发送的方法 Send(byte[] b) 参数是字节数组的形式,也就是说在发送
之前必须将你所要发送的数据转为字节数组的形式,然后才能发送,在接收端按相应的方法来从接收
到的字节数组里取数据。
那么接收端如何知道收到的字节数组里的那些字节值代表的是什么意义呢? 当然可以知道,因为有
协议!
某种数据协议会大致规定这些:数据的格式,数据头的格式,数据的内容,数据尾部表示,内容中某
部分表示什么。一句话说,就是对数据内容及组织方式的描述。
数据发送方会安协议编制数据,在这个字节数组中0-3的字节放的是数据头,4-5字节放的是该条数据
的长度,6-26字节放的是内容,27-28放的是校验码。
NMEA-0183协议数据之一:$GPGGA,134658.00,5106.9792,N,11402.3003,W,2,09,1.0,1048.47,M,-16.27,M,08,AAAA*60
接收方已经知道如何解析数据了,那么发送方该如何组织数据呢?
如何将现有的数据按协议的规则放入字节数组的一些指定位置呢?
不同的语言有各自的实现方法,现以C#为例,可以通过泛型字节列表的方式:
1.定义一个转换缓冲区。
2.将数据转成字节数组并存入缓冲区,可存入多种数据。
3.将缓冲区中的数据转成字节数组
至此就得到message这个发送的字节数组。
也有定义结构体对象,再给结构体对象属性赋值再从该对象的内存地址取字节数组的方式,我没有尝试过。
这仅是我的一个自己想到的方法,恳请路过的高手指定数据编制的真谛。
在C#使用Socket类实现通讯,发送的方法 Send(byte[] b) 参数是字节数组的形式,也就是说在发送
之前必须将你所要发送的数据转为字节数组的形式,然后才能发送,在接收端按相应的方法来从接收
到的字节数组里取数据。
那么接收端如何知道收到的字节数组里的那些字节值代表的是什么意义呢? 当然可以知道,因为有
协议!
某种数据协议会大致规定这些:数据的格式,数据头的格式,数据的内容,数据尾部表示,内容中某
部分表示什么。一句话说,就是对数据内容及组织方式的描述。
数据发送方会安协议编制数据,在这个字节数组中0-3的字节放的是数据头,4-5字节放的是该条数据
的长度,6-26字节放的是内容,27-28放的是校验码。
NMEA-0183协议数据之一:$GPGGA,134658.00,5106.9792,N,11402.3003,W,2,09,1.0,1048.47,M,-16.27,M,08,AAAA*60
接收方已经知道如何解析数据了,那么发送方该如何组织数据呢?
如何将现有的数据按协议的规则放入字节数组的一些指定位置呢?
不同的语言有各自的实现方法,现以C#为例,可以通过泛型字节列表的方式:
1.定义一个转换缓冲区。
List<byte> buffer = new List<byte>();
2.将数据转成字节数组并存入缓冲区,可存入多种数据。
float HeightD = 1.2616f; buffer.AddRange(BitConverter.GetBytes(HeightD));
3.将缓冲区中的数据转成字节数组
byte[] message = new byte[length]; buffer.CopyTo(0, message, 0, length)
至此就得到message这个发送的字节数组。
也有定义结构体对象,再给结构体对象属性赋值再从该对象的内存地址取字节数组的方式,我没有尝试过。
这仅是我的一个自己想到的方法,恳请路过的高手指定数据编制的真谛。
相关文章推荐
- 利用hadoop命令rcc生成Record 一种简单的方式实现自定义的writable对象
- 任意语言,任意大小,任意字体,任意格式,任意范围,任意字符,任意扫描方式取模,生成字节,UNICODE_Font_宋体16_ 纵向取模下高位_数据排列_从左到右从上到下
- Netty 快速入门系列 - Chapter 6 自定义数据协议【第十三讲】 通过大端序列方法将4个字节int转成 byte数组
- Huffman编码 一种数组实现方式
- 一个流行且实用的JS表单验证提示,演示了怎么自定义错误信息的显示方式,同时通过写FormValid.showError类方法来实现错误显示方式自定义: errMsg 是一个错误消息的数组,这样方便自定
- MODBUS协议 一种问答方式的通信协议
- java 代码转换音频数据格式(字节数组转换)
- java二进制,字节数组,字符,十六进制,BCD编码转换
- cocoa quartz保存image的一种方式 带image格式等选项
- Android 蓝牙通信及自定义消息协议的解析和生成
- LABEL MATRIX里用计数器自动生成流水号和自定义条码格式
- C#通过序列化的方式存读类、结构、数组等为二进制文件
- java二进制,字节数组,字符,十六进制,BCD编码转换
- 续 一种生成报表的另类方式--Excel
- Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"
- C#中一种通用的树的生成方式
- [转载]“在ASP.NET程序中以高效、轻量方式生成格式丰富的Excel文件”方案!
- JAVA自定义异常类的一种实现方式
- 将字符串修改成数组,这是生成的字符型坐标,转换成json格式
- Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换