1

What is the equivalent of Python's struct.pack(fmt, v1, v2, ...) in C# .NET? I have the following struct defined in C#

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

And would like to unpack it in Python application by using struct.unpack('<ci',myStringedStruct)

I was planing to use BinaryWriter into MemoryStream as suggested by Jon Skeet. However, BinaryWriter only write primitive types, and I have a struct.

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。但你不是 p/invoking 本机代码。

于 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 回答