解决方案 »

  1.   

    u8  ubyte
    u16 ushort
    u32 uint
      

  2.   

    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public class WAVEFORMATEX
    {
    public byte      ver      = 0;public UInt16 len      = 0;public UInt32 crc      = 0;public byte[] third_id = new byte[64];public IntPtr url_data = IntPtr.Zero;
    }
      

  3.   

    定义数据结构  不是类
    [StructLayoutAttribute(LayoutKind.Sequential,Pack = 1)]
            public struct MSG_HEAD_ST
            {
                [MarshalAs(UnmanagedType.I1, SizeConst = 1)]
                private byte ver;            public byte Ver
                {
                    get { return ver; }
                    set { ver = value; }
                }
                [MarshalAs(UnmanagedType.I2, SizeConst = 2)]
                private short len;            public short Len
                {
                    get { return len; }
                    set { len = value; }
                }
                [MarshalAs(UnmanagedType.I4, SizeConst = 4)]
                private int crc;            public int Crc
                {
                    get { return crc; }
                    set { crc = value; }
                }
                [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
                private byte[] third_id;            public byte[] Third_id
                {
                    get { return third_id; }
                    set { third_id = value; }
                }
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1)]
                private string url_data;            public string Url_data
                {
                    get { return url_data; }
                    set { url_data = value; }
                }
            }
    我是这样写的    这样写  计算出的字节数多了一个  Url_data就是这个    他本身是0字节的   怎么才能把它定义成0字节的呢
      

  4.   


        public partial class Form1 : Form
        {
            [StructLayout(LayoutKind.Sequential, Pack = 1)]
            public class MSG_HEAD_ST
            {
                public byte ver = 0;            public UInt16 len = 0;            public UInt32 crc = 0;            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
                public byte[] third_id = new byte[64];            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1)]
                public string Url_data = null;
            }         public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Console.WriteLine(Marshal.SizeOf(typeof(MSG_HEAD_ST)));
                MSG_HEAD_ST o = new MSG_HEAD_ST();
                o.Url_data = "12345";
                Console.WriteLine(o.Url_data);
            }
        }
      

  5.   

    你这定义的累 class    我说的是结构体struct  结构体中不能有初始值
      

  6.   

    url_data[0]为不定长数据, 具体长度按url_len来处理
      

  7.   

    class和struct在调用时没有区别。调用时传MSG_HEAD_ST的指针过去,url_data[0]定不定长没有关系。
      

  8.   

    如果说len有值  那就是url_data的字节数 取这个字段    如果说len为0  就不取url_data字段    具体怎么实现
      

  9.   

    设定好了数据结构  我需要byte数组转成数据结构    在转前怎么取len的值然后在判断要不要取url_data这个字段呢