在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中是abyte。Write(byte)
“i–int–integer–4 bytes”是C中的int。Write(Int32)
在.NET框架中没有内置类似于
pack
/unpack
的功能。1一。当p/调用本机代码时,存在Interop Marshaling。但你不是在调用本地代码。