公司现在有Delphi写的Socket服务端,结构体是
    UserKind:         integer;   
    UserCode:         string[20];
    UserName:         string[30];
    UserPwd:          string[20];
    UserDeptCode:     string[20];
    UserPlace:        string[20];
    AppHwnd:          LongWord;    //默认为0
    ModuleVersion:    string[30];
    ComputerName:     string[50];现在想问下,我用C#开发一个客户端,如何定义结构体?定义好了后如何转换为byte[]进行传输........
急死了,请各位大师们帮帮忙.......

解决方案 »

  1.   

    不同语言 定义的结构体 可能存在对位 的问题,导致对象不能正确解析, 还牵涉到 数据类型的 长度问题定义结构体public struct MyStruct{
       public int _number;
       public string _text;
    }在C#中 建议你使用string而不是char数组存储字符串
    还有 请在每一个字段前加入public 否则你会访问不到,C#相比C是有访问修饰的 将一个对象序列化成二进制数组2007年08月21日 星期二 下午 10:53//将一个对象序列化成二进制数组
    private byte[] SerializeToByte(ArrayList list)
    {
    //假如Arraylist为空,则返回null
    if (list.Count == 0)
    {
    return null;
    }
    byte[] array = null;
    try
    {
    //定义一个流
    Stream stream = new MemoryStream();
    //定义一个格式化器
    BinaryFormatter bf = new BinaryFormatter();
    //将Arraylist中的对象逐一进行序列化
    foreach (object obj in list)
    {
    bf.Serialize(stream, obj);
    }
    array = new byte[stream.Length];
    //将二进制流写入数组
    stream.Position = 0;
    stream.Read(array, 0, (int)stream.Length);
    //关闭流
    stream.Close();
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    return null;
    }
    return array;
      

  2.   

    能详细点吗?服务端接收的信息有长度的,198位,我序列化自己定义的结构体得到的byte[]都很长,这怎么办啊?
      

  3.   

    能详细点吗?服务端接收的信息有长度的,198位,我序列化自己定义的结构体得到的byte[]都很长,这怎么办啊?这和你们公司的具体协议有关系,你要问清楚:
     UserKind:        integer;  
        UserCode:        string[20]; 
        UserName:        string[30]; 
        UserPwd:          string[20]; 
        UserDeptCode:    string[20]; 
        UserPlace:        string[20]; 
        AppHwnd:          LongWord;    //默认为0 
        ModuleVersion:    string[30]; 
        ComputerName:    string[50]; 和这个结构里面的每个数据类型都有关系的,你公司的服务器端在接收到这个结构的时候一定会分析一下再做处理的,至于198位应该是规定好每次只能接收这么多数据,规范化,以免出错!这个结构里面的类型加起来应该是是198位