当前位置: 代码迷 >> C# >> 网络序列化有关问题
  详细解决方案

网络序列化有关问题

热度:33   发布时间:2016-05-05 04:47:35.0
网络序列化问题
我要实现上位机和DSP通信,上位机是C#语言,DSP是C语言。上位机通过网络向DSP发送一组数;数据类型定义好了
比如 第一个是 int, 第二个是 float  第三个是char类型。
我定义了一个类    
public class A
{
public int  aa;
public float bb;
public char cc;
}

我想通过序列化的形式将数据发送给DSP。  但是现在DSP结束到数据格式不对,顺序乱了。  不知道有什么好方法,之前我是将所有字节转化成Byte 然后拼起来,这样做太麻烦。
------解决思路----------------------

public struct ST
{
    public int A;
    public float B;
    public byte C;
    public override string ToString() {
        return string.Format("A:{0} B:{1} C:{2}", A, B, C);
    }
}
=======================================================
ST st_a = new ST();
st_a.A = 1;
st_a.B = 1.1F;
st_a.C = 2;

int len = Marshal.SizeOf(typeof(ST));
byte[] byData = new byte[len];
IntPtr p = Marshal.AllocHGlobal(len);
Marshal.StructureToPtr(st_a, p, true);
Marshal.Copy(p, byData, 0, len);
Marshal.FreeHGlobal(p);
MessageBox.Show(BitConverter.ToString(byData));

p = Marshal.AllocHGlobal(byData.Length);
Marshal.Copy(byData, 0, p, byData.Length);
ST st_b = (ST)Marshal.PtrToStructure(p, typeof(ST));
Marshal.FreeHGlobal(p);
MessageBox.Show(st_b.ToString());

------解决思路----------------------
用这个吧,不用再定义类,直接封装成字节数组了。


 byte[] buffer = null;
            using (MemoryStream mem = new MemoryStream())
            {
                BinaryWriter writer = new BinaryWriter(mem);
                writer.Write(12);
                writer.Write(13.1f);
                writer.Write('c');
                buffer = mem.ToArray();
                mem.Close();
            }
  相关解决方案