4

是否有一些库允许执行与打包和解Perl 函数相同的操作?

模板列表为http://perldoc.perl.org/functions/pack.html

pack 用于将列表转换为二进制表示
unpack 用于将二进制结构转换为普通 Perl 变量

简而言之:

我给出了一个 byte[] 数组,一个解析数据包的模板,以及将接收提取数据的变量。

似乎Mono提供了这样的功能,但模板不一样,请参阅 http://www.mono-project.com/Mono_DataConvert#Obtaining_Mono.DataConvert

4

2 回答 2

0

看来您想知道的是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 文章。通过自己实现接口,您可以获得对二进制模板的大量控制,以换取确保功能的高度复杂性。

于 2013-08-08T13:35:13.593 回答
-1

http://msdn.microsoft.com/en-us/library/system.bitconverter.tosingle%28v=vs.110%29.aspx

上面的链接显示了更直接等效于打包和解包的方法。

于 2013-11-06T06:24:11.070 回答