代码:(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 );
}

解决方案 »

  1.   

    转为byte是正确的,网络发送好像只能用流数据?
      

  2.   

    byte[] buf = new byte[len];
    System.IO.MemoryStream stream = new System.IO.MemoryStream(buf);
    stream.Write(data);//依次写入各个数据
    //buf中就是你的数据
      

  3.   

    谢谢楼上的,多给我一个方法!,也就是说我把 自己定义的数据接构里的每一个项都一个一个的付进去是吗?如果说基构体中还包含结构体,那样会很繁琐,有直接把对象化成byte[]的方法吗?但是不使用不安全代码~!
      

  4.   

    自己写代码进行实现,也就是把struct或者class定义的类型转换成byte[],需要你编程实现。其中c#提供了BitConverter以及Encoding这两个类可以进行转换。在转换之前,你最好能了解传出什么样的byte[]能在上位机和单片机那边转换成对象。
      

  5.   

    对象序列化的方法转成byte数组,行吗??一口咬死说不行的话,我就不做那方面的测试了,直接自己写了!
      

  6.   

    to 对象序列化的方法转成byte数组,行吗??一口咬死说不行的话,我就不做那方面的测试了,直接自己写了!你要明白通信是双方的事情,即发送方和接收方。
    例如在发送方把“ABC”转换成“123”进行发送,那么接收方接收到“123”能明白发送的内容是“ABC”。否则相当于发送方作无用功。
      

  7.   

    我讲以下我的看法,在通讯中使用copymemory是有一定的优势的,无论上位机还是单片机都不会在有对数据拆分,对内存进行操作的问题,直接把byte数组用copymemory转换成结构体那样的话,内存中的数据就可以直接使用了,这说明协议有一定的优势比单独规定数据位的意义,如果LZ要把结构体自己写到byte[]中的话要做的工作有多麻烦吗?结构体在内存中存贮不是想象的那样,会对数据有合并,比如char和short两个变量在一起的时候在内存中占4个字节,而不是6个!