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

在进行网络通讯时,一方需要向另一方传输数据,这些数据可以是一些值,一条语句,一个数组。

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

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

这仅是我的一个自己想到的方法,恳请路过的高手指定数据编制的真谛。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值