以下是我的结构体  public struct Iridium_MessageInfo
    {
        private byte start;                 //包头字 0xd7
        private byte messageType;           //报文类型
        private UInt16 no;                  //报文编号
        private UInt16 check;               //报文验证码
        private UInt16 len;                 //报文长度
        private byte[] messageData;         //报文数据        public byte Start { get { return start; } set { start = value; } }
        public Interpret.messagetype MessageType { get { return (Interpret.messagetype)messageType; } set { messageType = (byte)value; } }
        public UInt16 No { get { return no; } set { no = value; } }
        public UInt16 Check { get { return check; } set { check = value; } }
        public UInt16 Len { get { return len; } set { len = value; } }
        public byte[] MessageData { get { return messageData; } set { messageData = value; } }        public Iridium_MessageInfo(byte Start, Interpret.messagetype MessageType, UInt16 No, UInt16 Check, UInt16 Len, byte[] MessageData)
        {            this.start = Start;
            this.messageType = (byte)MessageType;
            this.no = No;
            this.check = Check;
            this.len = Len;
            this.messageData = MessageData;
        }
    }我在程序中是这样调用的        private byte[] test(object structObj)
        {
            //得到结构体的大小  
            int size = Marshal.SizeOf(structObj);
            //创建byte数组 
            byte[] bytes = new byte[size];
            //分配结构体大小的内存空间 
            IntPtr structPtr = Marshal.AllocHGlobal(size); 
            //将结构体拷到分配好的内存空间 
            Marshal.StructureToPtr(structObj, structPtr, false); 
            //从内存空间拷到byte数组  
            Marshal.Copy(structPtr, bytes, 0, size);  
            //释放内存空间  
            Marshal.FreeHGlobal(structPtr); 
            //返回byte数组  
            return bytes;  
        }
        private void demo()
        {
            Iridium_MessageInfo mess = new Iridium_MessageInfo(0xd7, 0xa5, 1, 23, 12, new byte[]{0x01,0x02,0x03,0x04});
            byte[] b = this.test(mess);
             // 将数据发送出去
        }
通过 Iridium_MessageInfo mess   初始化结构体 。 然后通过 test() 方法将结构体转换成 BYTE[]  
功能是成功的。 但是 
Iridium_MessageInfo mess = new Iridium_MessageInfo(0xd7, messagetype.IRIDIUM_MESSAGE_TYPE_LINK, 1, 23, 12, new byte[]{0x01,0x02,0x03,0x04});
最后一个参数  new byte[]{0x01,0x02,0x03,0x04}  却有些混乱了 每次得到的都不一样 ,而且不是原来的数据 1 2 3 4
,前面的数据都是对的。这个是什么原因造成的呢? 只有转换byte[]的时候才出现这个错误。