您的位置:首页 > 其它

按自定义协议格式生成二进制字节数组的一种方式

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.定义一个转换缓冲区。

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这个发送的字节数组。

也有定义结构体对象,再给结构体对象属性赋值再从该对象的内存地址取字节数组的方式,我没有尝试过。



这仅是我的一个自己想到的方法,恳请路过的高手指定数据编制的真谛。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐