在C#中,从socket中收到的数据,怎么样变成具体的类中的数据。
比如说,C语言程序客户端发送了这样一个结构
struct test
{
int a;
int b;
char c;
};
这个结构中的数据,当作网络数据流发了过来,在C#中,怎样把他还原为结构中的数据,
难道只能够一个字节一个字节的解析?
或者是C#不适合做分析数据封包程序,现在正在决定使用什么语言做开发,处于技术验证阶段。
但是发现C#好像不太适合,但是使用C++的话,现在好像只能用MFC了。
比如说,C语言程序客户端发送了这样一个结构
struct test
{
int a;
int b;
char c;
};
这个结构中的数据,当作网络数据流发了过来,在C#中,怎样把他还原为结构中的数据,
难道只能够一个字节一个字节的解析?
或者是C#不适合做分析数据封包程序,现在正在决定使用什么语言做开发,处于技术验证阶段。
但是发现C#好像不太适合,但是使用C++的话,现在好像只能用MFC了。
我写了两个方法,可以直接使用,非常方便:
一、对象序列华为字节数组
/// <summary>
/// 二进制方式将object对象序列化到字节数组中
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] SerializeByBinary ( Object obj )
{
byte[] buffer2;
try
{
MemoryStream stream1 = new MemoryStream();
BinaryFormatter formatter1 = new BinaryFormatter();
formatter1.Serialize(stream1, obj);
byte[] buffer1 = stream1.ToArray();
stream1.Close();
buffer2 = buffer1;
}
catch
{
buffer2 = null;
}
return buffer2; }
二、字节数组反序列话为对象
/// <summary>
/// 二进制方式字节数组中数据还原为对象
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static object DeSerializeByBinary ( byte[] byt )
{
object obj2;
try
{
MemoryStream stream = new MemoryStream(byt);
BinaryFormatter formatter = new BinaryFormatter();
object obj1 = formatter.Deserialize(stream);
stream.Close();
obj2 = obj1;
}
catch
{
obj2 = null;
}
return obj2; }将object转换成自己的对象类型就可以了
如果本答案对你有帮助,请给分,谢谢
比如,你把这个struct序列化到某个stream后,在反序列化,得到的就是这个struct
在C#中,无论是class还是struct都与C中的struct内存结构不一样,根本没有办法装换。