因为需要自定义了一个struct         public struct zisepaPaceFrame
        {
            public char[] addr;   
            public UInt16 cmd;
            public UInt32 frameId;
            public UInt16 trigger;
            public UInt16 crc16;
        }另外 addr已经赋值:addr = new char[6] { 'F', 'F', 'F', 'F', 'F', 'F' }
请问如何把这个struct转换至byte[]?
已经尝试过Marshal.StructureToPtr的方法,有错误,无法编译

解决方案 »

  1.   

    你是不是想要这个struct的byte[]值?
    这个byte[]值也可以转换为struct?
    你可以使用二进制序列化功能,百度一下。
      

  2.   

    试过了,不行,还是有BUG,好像都是在刚开始将char[] 写入byte[]里,马上出现错误跳出了。
      

  3.   

    用marshal
    public char[] addr;   //这个必须定长
      

  4.   

    你怎么转的,char和byte长度都不一样
      

  5.   

    如果你定义这个结构是为了非托管调用,那么不能用char[],而是byte[]...
    在。Net中char是16位的
    //obj为结构对象
      public static byte[] rawSerialize(object obj)        {            int rawsize = Marshal.SizeOf(obj);            IntPtr buffer = Marshal.AllocHGlobal(rawsize);            Marshal.StructureToPtr(obj, buffer, false);            byte[] rawdatas = new byte[rawsize];            Marshal.Copy(buffer, rawdatas, 0, rawsize);            Marshal.FreeHGlobal(buffer);            return rawdatas;        }
      

  6.   

    添加引用:using System.Runtime.Serialization.Formatters.Binary; 序列化:            BinaryFormatter bf;
                bf = new BinaryFormatter();
                MemoryStream stream = new MemoryStream();
                zisepaPaceFrame ast = new zisepaPaceFrame();
                ast.cmd = 0x1234;
                ast.addr = new char[] { '1', '2', '3', '4', '5' };
                bf.Serialize(stream, ast);
                byte[] buff = stream.ToArray();