我要实现上位机和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();
}