模板列表为http://perldoc.perl.org/functions/pack.html,
pack 用于将列表转换为二进制表示
unpack 用于将二进制结构转换为普通 Perl 变量
简而言之:
我给出了一个 byte[] 数组,一个解析数据包的模板,以及将接收提取数据的变量。
似乎Mono提供了这样的功能,但模板不一样,请参阅 http://www.mono-project.com/Mono_DataConvert#Obtaining_Mono.DataConvert。
模板列表为http://perldoc.perl.org/functions/pack.html,
pack 用于将列表转换为二进制表示
unpack 用于将二进制结构转换为普通 Perl 变量
简而言之:
我给出了一个 byte[] 数组,一个解析数据包的模板,以及将接收提取数据的变量。
似乎Mono提供了这样的功能,但模板不一样,请参阅 http://www.mono-project.com/Mono_DataConvert#Obtaining_Mono.DataConvert。
看来您想知道的是Binary Serialization。从链接;
序列化可以定义为将对象的状态存储到存储介质的过程。在此过程中,对象的公共和私有字段以及类的名称,包括包含该类的程序集,都被转换为字节流,然后写入数据流。当对象随后被反序列化时,将创建原始对象的精确克隆。
可以在此处找到更具体的 C# 二进制序列化示例(针对 .NET Framework 4.5) 。简介;您必须使用 [Serializable] 标签注释您希望序列化和反序列化的类,然后使用 Formatter 实例实际执行序列化/反序列化。
所以在 Perl 中你可以简单地说:
pack TEMPLATE,LIST
在 C# 中,您将需要以下内容:
[Serializable]
public class MyObject {
public int n1 = 0;
public int n2 = 0;
public String str = null;
}
// ... And in some other class where you have you application logic
public void pack()
{
MyObject obj = new MyObject();
obj.n1 = 1;
obj.n2 = 24;
obj.str = "Some String";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
}
为了解决您想要控制序列化模板的想法,您可能需要自己实现 ISerializable。这是一篇关于自定义二进制序列化的 MSDN 文章。通过自己实现接口,您可以获得对二进制模板的大量控制,以换取确保功能的高度复杂性。
http://msdn.microsoft.com/en-us/library/system.bitconverter.tosingle%28v=vs.110%29.aspx
上面的链接显示了更直接等效于打包和解包的方法。