C#传short或int给C++(通过BitConverter.GetBytes(...)获取字节)时是否需要用IPAddress.HostToNetworkOrder来进行转换?即下面这样是否正确?
short sh1 = 4322;   //准备发送的short
short network1 = IPAddress.HostToNetworkOrder(sh1);
byte[] output = BitConverter.GetBytes(network1);   //准备发送的字节

解决方案 »

  1.   

    我自己试了一下,发现不需要转,我做了个例子:
    //C++(VS.NET 2003中的MFC):
    short i = 555;
    BYTE b1 = (BYTE)i;
    BYTE b2 = (BYTE)(i>>8);//C#(VS.NET 2003):
    short sh1 = 555;
    byte[] buffer = Short2Bytes(sh1);
    byte b1 = (byte)sh1;
    byte b2 = (byte)(sh1>>8);然后发现两边顺序是一样的。
    是否就意味着我是不需要转换的?那么IPAddress.HostToNetworkOrder应该在哪种情况下使用呢?
      

  2.   

    public ReceInfo(byte[] b,int nlen)
    {
    buf = b;
    len = nlen; mData.Head = System.Text.Encoding.Default.GetString(buf,0,20).Replace("\0","");
    mData.Cmd = System.Text.Encoding.Default.GetString(buf,20,20).Replace("\0","");
    mData.SmsData = System.Text.Encoding.Default.GetString(buf,40,20).Replace("\0","");
    }
    在C++传来的数据后,都补了"\0",我也正在想什么合适的好的办法。把结构转换为byte[] .
    可以用序列化。但不确定顺序会不会有影响!
    QQ:交流一下。112090835
      

  3.   

    序列化结构的话,要在结构前面加个标记,不记得具体的了,查查MSDN吧,目的是固定顺序,不然它会选择一个它认为最优化的方式来存储数据,不能保证顺序和大小。
      

  4.   

    转换网络字节主要是为廖网络交互,所谓网络字节顺序是一种网络传输的标准,如果你知道自己的程序要交互的对象认识你的host字节顺序,你也可以不转换。但还是建议转换,就像网络通讯需要tcp协议一样