传的不是二进制流吗,取到二进制流了解析不久好了。你们规定的通信协议是什么样的
我收到的是二进制流,我接收完成了,单片机是以结构体的形式体现的,我这里要把二进制流转换成结构体,但是MarshalAs的sizeconst因为传输的是不固定的, 我还没接收数据的时候并不知道,结构体的sizeconst该怎么设置
@时光cc:可以定义一个最大长度,那边也以最大长度传,然后再加个长度字段,用来告诉你这个字段到底有多少位。
真正解决是解决不了的。除非你再定义一个协议,在包开头传输先传输结构体描述,多少位到多少位是哪个字段,什么类型,这种解决方案还不如让单片机那边以你指定的方式序列化后再传,
PS:我很喜欢用json序列化传东西,简单方便
@吴瑞祥: 对的 一开始是定义了最大程度传送的,后面取消掉了,要改成不固定的
@时光cc: 要看你们2个定义的通讯协议是怎么样的。还是选一个序列化协议吧,以结构体来说是不行的。
C里结构体是必须确定每个字段的长度的,
@吴瑞祥: 谢谢,我在去考虑下 然后看下序列化。
一般做的和仪器数据传输格式都是类似这样的
数据包格式,如下
帧头 |
长度 |
命令ID |
参数 |
Crc16 |
0xFA |
Len |
Cmd |
xxxx |
Crc16 |
1、帧头:数据包的固定的第一个数据;
2、长度:数据包的字节数总和:
3、命令:数据包的有效命令ID;
4、参数:该命令ID所附带的参数,如果没有参数不填充0x00;
5、Crc16:占2个字节,数据包的的CRC校验值;
http://www.cnblogs.com/fengye87626/p/4173288.html 貌似我之前也遇到了同样的问题,映射到结构体的时候SizeConst必须是固定长度, 最后解决方法是先判断length的长度,再根据length长度截取后面的字段