1

C# .NETにおける Python のstruct.pack(fmt, v1, v2, ...)に相当するものは何ですか? 私はC#で定義された次の構造体を持っています

[StructLayout(LayoutKind.Sequential, Pack=1)]
    struct user {
        public char id;
        public int age; 
    };

そして、Pythonアプリケーションでそれを解凍したいstruct.unpack('<ci',myStringedStruct)

Jon Skeetの提案に従って、 BinaryWriterMemoryStreamに使用する予定でした。ただし、 BinaryWriterはプリミティブ型のみを記述し、構造体を持っています。

4

2 に答える 2

3

フィールドを次々にBinaryWriterに書き込むことができます。

User user = ...

using (BinaryWriter writer = ...)
{
    writer.Write((byte)user.id);
    writer.Write(user.age);
}

.NET Framework に組み込まれているpack/のような機能はありません。1unpack

1. ネイティブ コードを p/invoking しているときは、Interop Marshalingがあります。しかし、ネイティブ コードを呼び出しているわけではありません。

于 2013-09-17T23:49:58.733 に答える
0

BinaryFormatter クラスを使用して、オブジェクトの階層全体または単純な構造体をシリアル化することもできます。ただし、手動で (バイトごとに) 行うか、XML などの非バイナリ形式を使用して、プラットフォームや言語に依存しないようにする必要がある場合があります。

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter.aspxを参照してください。

編集:後でPythonを使用して解凍するという要求に気づきませんでした。これは、Python の unpack 関数では機能しない可能性があります。一般に、ライブラリ呼び出しを使用して、さまざまなライブラリで作成されたさまざまなアプリケーションで使用するためにバイナリ形式でデータを書き込むことには躊躇します。一貫性を保証するものではなく、仕様は将来変更される可能性があります。言語に依存しない標準を使用する方がよいでしょう。

于 2013-09-17T23:53:47.140 に答える