网络序列化问题 c#网络 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 尽量不要使用字节编码,使用json之类的编码更好。当一些属性不匹配时,或者不存在时,或者多出来一些属性时,或者(例如)string的长度可变时,或者数字的表示位数可变时,json匹配的很好。json不但容易调试,而且也极不容易出错。而且json的性能几乎跟二进制相当。设备程序开发,你应该找一个c语言的json工具去用。 就你的问题而言,如果你一定要将属性按照 byte 流方式写入一个 byte[],那么你就写入就是了。出错是你自己的事情,谈不上什么“好方法”了,基于最基础的方法都做错了,还能有什么好方法? 能在说详细一点吗? json 是一个脚本语言? 我现在 要和嵌入式设备通信(TS201芯片),我用Winform 编写一个界面(C#语言),通过Socket收发命令,之前是用C++写的,可以直接进行内存Copy。 不知道json 应该还怎么弄? C语言那部分不能改,因为是和其他单位联合调试,让对方改很麻烦,之前用C++的时候用内存Copy还是很好实现的,C#语言不知道可以 将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(); } 求助,C#达人进来看看吧 当前上下文中不存在名称“video c#画图 读矢量图总是内存不足 查询后的分页,请帮帮我 VS2008 C# 调试程序 内存分配访问无效。 (异常来自 HRESULT:0x800703E6) datarelation+datagrid 要怎么绑定? 高份求教代码:如何在上传时将文本文件的空行去除掉? 如何可以查询数据库里是否已经有了此项了? 如何禁止一个控件重绘? C# CSV 导入数据库 c#中form窗体第二次打开时保持第一次打开时的位置和数据信息
能在说详细一点吗? json 是一个脚本语言? 我现在 要和嵌入式设备通信(TS201芯片),我用Winform 编写一个界面(C#语言),通过Socket收发命令,之前是用C++写的,可以直接进行内存Copy。 不知道json 应该还怎么弄?
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();
}