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のようです。リンクから;

シリアル化は、オブジェクトの状態をストレージ メディアに保存するプロセスとして定義できます。このプロセス中に、オブジェクトの public フィールドと private フィールド、および class の名前 (クラスを含むアセンブリを含む)が bytes のストリームに変換され、データ ストリームに書き込まれます。その後、オブジェクトが逆シリアル化されると、元のオブジェクトの正確なクローンが作成されます。

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

上記のリンクは、pack および unpack とより直接的に同等のメソッドを示しています。

于 2013-11-06T06:24:11.070 に答える