解决方案 »

  1.   

    尽量不要使用字节编码,使用json之类的编码更好。当一些属性不匹配时,或者不存在时,或者多出来一些属性时,或者(例如)string的长度可变时,或者数字的表示位数可变时,json匹配的很好。json不但容易调试,而且也极不容易出错。而且json的性能几乎跟二进制相当。设备程序开发,你应该找一个c语言的json工具去用。
      

  2.   

    就你的问题而言,如果你一定要将属性按照 byte 流方式写入一个 byte[],那么你就写入就是了。出错是你自己的事情,谈不上什么“好方法”了,基于最基础的方法都做错了,还能有什么好方法?
      

  3.   


    能在说详细一点吗?  json 是一个脚本语言?    我现在 要和嵌入式设备通信(TS201芯片),我用Winform 编写一个界面(C#语言),通过Socket收发命令,之前是用C++写的,可以直接进行内存Copy。 不知道json  应该还怎么弄?
      

  4.   

    C语言那部分不能改,因为是和其他单位联合调试,让对方改很麻烦,之前用C++的时候用内存Copy还是很好实现的,C#语言不知道可以 将Byte[] 型数组,转换成结构体吗?
      

  5.   


    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());
      

  6.   

    用这个吧,不用再定义类,直接封装成字节数组了。
     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();
                }