在C#.NET中,Python的struct.pack(fmt, v1, v2, ...)等价于什么?我在C中定义了以下结构#

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

并希望使用struct.unpack('<ci',myStringedStruct)在Python应用程序中解包
我打算用BinaryWriter变成MemoryStream作为suggested by Jon Skeet。但是,BinaryWriteronly write primitive types和我有一个结构。

最佳答案

您可以将字段一个接一个地写入BinaryWriter

User user = ...

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

BinaryWriter使用平台的端部,即x86/x64上的小端部。
“c–char–string of length 1–1 byte”在c中是abyteWrite(byte)
“i–int–integer–4 bytes”是C中的intWrite(Int32)
在.NET框架中没有内置类似于pack/unpack的功能。1
一。当p/调用本机代码时,存在Interop Marshaling。但你不是在调用本地代码。

10-06 07:20