none
请问如何按照类的长度,转成指定长度的字节? RRS feed

  • 问题

  •  public class tt
        {
            public char[] MsgCod;
            public char[] Sender;
            public char[] Recver;

            public tt()
            {
                MsgCod = new char[6];
                Sender = new char[6];
                Recver = new char[6];
            }

        }

    把这个类转成字节数组,字节数组的长度是18,怎么写代码?

    我是这样写的,按照每个字符串转成字节数组,然后合并成一个大的字节数组,发送到c++服务器端,但是据说这样比较麻烦还容易出错,有没有一种方式?按照类里面属性的大小,直接生成并且合并成指定长度的字节数组

     MySeis Station = new MySeis();
                Station.TypeNum = CmbVer.Text.PadRight(16, '\0');
                Station.Supplier = txtSup.Text.PadRight(32, ' ');
                Station.Serial = txtNum.Text.PadRight(16, ' ');
                Station.Type=cmbRecord.Text.PadRight(4,' ');
                Station.Standard=cmbStan.Text.PadRight(12,' ');
                Station.Wid=txtWid.Text.PadRight(16,' ');
                Station.Buried=Convert.ToSingle(txtBurial.Text);
                Station.Batholith = txtBatho.Text.PadRight(32, ' ');
                Station.Status = Status.PadRight(4, ' ');
                Station.ResFile = ResFile.PadRight(32, ' ');
                Station.Branch = Convert.ToSingle(txtBran.Text);
                Station.DAS = Das;
                string[] cb=new string[3];
                cb[0]=cmbBran1.Text.PadRight(8,' ');
                 cb[1]=cmbBran2.Text.PadRight(8,' ');
                 cb[2]=cmbBran3.Text.PadRight(8,' ');
                 Station.Code = cb;
                //Station.Status=tx
                //Station.Channels = Convert.ToInt16(CboAD.Text);
                //Station.Lng = float.Parse(txtLng.Text);
                //Station.Lat = float.Parse(txtLat.Text);
                //Station.Alti = float.Parse(txtSenior.Text);
                //Station.StaData = FirDate.PadRight(32, ' ');
                //Station.Sym = txtIden.Text.PadRight(4, ' ');
                //Station.Soft = Version.PadRight(32, ' ');
    
                 byte[] TypeNum = System.Text.Encoding.Default.GetBytes(Station.TypeNum);
                 byte[] Supplier = System.Text.Encoding.Default.GetBytes(Station.Supplier);
                 byte[] Serial = System.Text.Encoding.Default.GetBytes(Station.Serial);
                 byte[] Type = System.Text.Encoding.Default.GetBytes(Station.Type);
    
    
                 byte[] Standard = System.Text.Encoding.Default.GetBytes(Station.Standard);
                 byte[] Wid = System.Text.Encoding.Default.GetBytes(Station.Wid);
                 byte[] Buried = BitConverter.GetBytes(Station.Buried);
                 byte[] Batholith = System.Text.Encoding.Default.GetBytes(Station.Batholith);
                 byte[] Status1 = System.Text.Encoding.Default.GetBytes(Station.Status);
                 byte[] ResFile1 = System.Text.Encoding.Default.GetBytes(Station.ResFile);
                 byte[] Branch = BitConverter.GetBytes(Station.Branch);
                 byte[] DAS1 = BitConverter.GetBytes(Station.DAS[0]);
                 byte[] DAS2 = BitConverter.GetBytes(Station.DAS[1]);
                 byte[] DAS3 = BitConverter.GetBytes(Station.DAS[2]);
    
                 byte[] Code1 = System.Text.Encoding.Default.GetBytes(Station.Code[0]);
                 byte[] Code2 = System.Text.Encoding.Default.GetBytes(Station.Code[1]);
                 byte[] Code3 = System.Text.Encoding.Default.GetBytes(Station.Code[2]);


    please verify my account


    • 已编辑 lctk 2017年4月19日 23:42
    2017年4月19日 11:29

全部回复

  • 这样写

    Station.TypeNum = CmbVer.Text.PadRight(16, '\0');

    导致的业务逻辑处理在类的外面,我认为应该要封装到类中

    public char[]  MsgCodByte

    {

       get {

           return MsgCod.PadRight(16,'\0')   //这里封装了要发送的字节,以后有变化也只需要维护这里的规则

    }

    }

    public string _MsgCod{ get;set;} 这里取外面的控件值

    最后取MsgCodByte属性,拼凑在一起即可。

        


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年4月20日 0:15