高手进__关于上位机和单片机协议通讯问题(分不够我再补!)
代码:(c#)
tInfo = new byte[Marshal.SizeOf(time[0])]//tInfo初始化 time[]已知,然后调用下面这个方法
public static void CopyMemory(byte[] Destination, tTime[] Source, int Length)
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bFormat = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream stream = new System.IO.MemoryStream();
bFormat.Serialize(stream, Source);
stream.Read(Destination, 0, Destination.Length)
stream.Close();
}
说明:tTime[] Source是自定义的数据结构;这个是本人模拟windows的copymemory这个api实现把内
存的数据结构存储到byte数组的方法。
目的:copymemory不安全,用这个方法实现,把内存的数据结构保存到byte数组(还要对数组进行操作计算校验码),然后通过一个协议封包,通过tcp/ip协议转发到单片机,单片机解析出数据,完成特定的功能。
问题:这种方法能不能够把内存中的数据拷贝到byte数组中,变成单片机识别的数据结构,单片机用c
开发的;我这个把对象化为byte数组的方法好不好,有什么好的方法给个建议;或者给说一下
对象序列化是怎样工作的;
注: 原来的使用windows的copymemory这个api可以和单片机通讯
网友建议:不要用序列化,单片机不认识的
c#可以用指针把1个结构转换成byte数组。
转换的时候要注意几点
1。结构里不能有数组,类,字符串之类的东西
2. 单片机的字节对齐方式和字节顺序
比如
private unsafe void Test()
{
int test = 0;
int* pint = &test ;
byte* pdata = ( byte* ) pint;
int dataLength = sizeof ( int );
byte[] body = new byte[dataLength];
for ( int i = 0; i < body.Length; i++ )
body[ i ] = *( pdata + i );
}