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)
我计划将BinaryWriter用作MemoryStream suggested by Jon Skeet。但是,BinaryWriter only write primitive types,我有一个结构。
答案 0 :(得分:3)
您可以将字段一个接一个地写入BinaryWriter:
User user = ...
using (BinaryWriter writer = ...)
{
writer.Write((byte)user.id);
writer.Write(user.age);
}
.NET Framework中没有内置pack
/ unpack
的功能。 1
1。当您调用本机代码时,有Interop Marshaling。但你不是在调用本机代码。
答案 1 :(得分:0)
您还可以使用BinaryFormatter类来序列化整个对象层次结构,或者只是一个简单的结构体。您可能必须手动(逐字节)或使用非二进制格式(例如XML)来使其与平台和语言无关。
编辑:我没有注意到稍后使用Python解压缩的请求。这不太适用于Python的解包功能。一般来说,我会犹豫是否使用库调用以二进制格式写入数据,以便在使用不同库编写的不同应用程序中使用。不保证一致性,并且规范可能在将来发生变化。你最好使用与语言无关的标准。