c# - Python 的 struct.pack(fmt, v1, v2, ...) 在 C# .NET 中的等效项是什么?

标签 c# python c struct pack

Python 的 struct.pack(fmt, v1, v2, ...) 相当于什么?在 C#.NET 中?我在 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 .然而,BinaryWriter only write primitive types ,我有一个结构。

最佳答案

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

User user = ...

using (BinaryWriter writer = ...)
{
    writer.Write((byte)user.id);
    writer.Write(user.age);
}
  • BinaryWriter使用平台的字节序,即 x86/x64 上的小字节序。
  • “c – char – 长度为 1 – 1 字节的字符串”是一个 byte在 C# 中。 Write(byte)
  • "i – int – integer – 4 bytes"是 int在 C# 中。 Write(Int32)

.NET Framework 中没有内置类似pack/unpack 的功能。1

1。当您 p/调用 native 代码时,有 Interop Marshaling .但您不是在 p/调用 native 代码。

关于c# - Python 的 struct.pack(fmt, v1, v2, ...) 在 C# .NET 中的等效项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18861606/

相关文章:

javascript - 在 Python 中解析 JavaScript Web 应用程序的选项

python - 为什么 scipy.fftpack.rfft 返回真实值?

c# - 当前上下文中不存在名称 'xx'

c# - 我只需要减少每行的输入。然后在C#中每个单词空间剪切每一行,但我似乎无法弄清楚2d数组的工作原理

python - XGBoost - xgb.cv 和 cross_val_score 之间的巨大差异

c - for 循环中 *(&a – i) 的含义。这是乘法吗?

c - C 中结构和函数定义的导入错误

c# - 为什么 Roslyn 在这里生成 > 比较而不是 != 比较?

c# - 尝试通过 C# 中的多线程从两个不同的数据库表中获取值

c - 如何产生持续的UDP流量?