推荐用unsafe代码如果你的接受的流的对象格式很清楚,也可以用反序列化

解决方案 »

  1.   

    你还不如直接传输为xml,一个xml一个包
      

  2.   

    saucer(思归, MS .NET MVP),TheAres(班门斧),timmy3310(tim)等大虾都在哪里?来指导指导小弟了。
      

  3.   

    难道.net framework不能实现吗?而且我接受的包是一个其它机器发回来的,我没法控制它,我只知道他发来的包的结构,我不能对他序列化,应为这个问题在C、C++中很简单,但是在VB、Delphi中很难实现,现在我觉得C#功能挺强大的,没想打着也要借助unsafe的指针,这使我很失望,难道这里没有在VB或Delphi中解决过类似问题的人吗?
      

  4.   

    如果你的发送方也是.Net的应用程序,那么你可以把传送方式改改,使用Binary方式序列化一个结构,反序列化的时候可以直接反序列化成你的结构,具体使用请参考MSDN:
      ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconbinaryserialization.htm
    如果发送方不是.Net应用程序,而且发送的格式不能改,那么没有先成的方法直接序列化成你的结构,你只有手动的解析流的内容,一个字节一个字节读出来,然后按照你的格式转成你的值,关于把字节流转成Int和Float,你可以查查以前的贴子,有这方面的内容,FAQ里面好像也有字符串的话,你需要知道编码方式,然后用Encoding.GetString的方法把字节数组转成相应编码的字符串
      

  5.   

    timmy3310(Tim) 你来了,我很高兴,我实说了吧,我在开发一个使用ICMP的程序,我知道ICMP的格式,我看过类似的C++程序,很容易懂,我想写个C#的这才发现没法将收到的包转化到结构中,自然我没法使用序列化。我只希望如果不知道解决办法,请告诉我几个可能有这方面信息的网站也可以,谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  6.   

    "关于把字节流转成Int和Float,你可以查查以前的贴子,有这方面的内容,FAQ里面好像也有"
    用什么关键字在哪里查,请告诉我好吗?
      

  7.   

    建议你用XML和WebService.
    在客户端读取WEbService传来的DataSet可以满足你的要求
      

  8.   

    1. 如果Client/Server都是.NET,那么使用Serialization也许更好些——虽然回多一些额外的负荷。2. 否则,如果只有这三个变量成员,那么简单一点的办法就是用BitConverter类从byte[]中依次读出来:BitConverter.ToInt32, ToString和ToDouble。3. 更通用的方法,如下所示:
    http://expert.csdn.net/Expert/topic/1764/1764944.xml?temp=5.108058E-03
    [StructLayout(LayoutKind.Sequential)]
    public struct MyStruct {
       //... your type member here.
    }...
    MyStruct str = ...; 
    int sz = Marshal.SizeOf(typeof(MyStruct));
    IntPtr buffer = Marshal.AllocHGlobal(sz);
    Marshal.StructureToPtr(str, ptr, false);byte[] mem = new byte[sz];
    Marshal.Copy(buffer, mem, 0, sz);Marshal.DestoryStructure(buffer);
    Marshal.FreeHGlobal(buffer);4. 上面的代码需要两次Copy内存,性能比较差。
       如果可以使用unsafe代码的话,可以直接把byte[]指针转换成IntPtr, 可以省下一次内存Copy。
      

  9.   

    我在VB里面实现和C的同样的通讯问题~~ 
    但是我不是saucer(思归, MS .NET MVP),TheAres(班门斧),timmy3310(tim)等大虾~~而且也没有星~~所以无可奉告~~~
    说话不要那么绝~~小子!
      

  10.   

    首先谢谢qqchen79(知秋一叶 [MS MVP]) ,并谢谢各位的参与,为了吸引大家的注意,使用了一些特别的词语,请各位原谅