什么等于 c# 中的 c size_t

新手上路,请多包涵

我在 C++ 中有一个结构:

 struct some_struct{
uchar* data;
size_t size;
}

我想在 manged(c#) 和 native(c++) 之间传递它。 C#size_t 的等价物是什么?

PS我需要大小完全匹配,因为任何字节差异都会在包装时导致巨大的问题

编辑:

本机代码和托管代码都在我的完全控制之下(我可以编辑我想要的任何东西)

原文由 Humam Helfawi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 521
2 个回答

没有与 size_t 等效的 C#。

The C# sizeof() operator always returns an int value regardless of platform, so technically the C# equivalent of size_t is int , but that’s no帮助你。

(注意 Marshal.SizeOf() 也返回一个 int 。)

另请注意,就 sizeof()Marshal.Sizeof() 而言,没有任何 C# 对象的大小可以大于 2GB。数组可以大于 2GB,但您不能将 sizeof()Marshal.SizeOf() 与数组一起使用。

出于您的目的,您需要知道 DLL 中的代码版本用于 size_t 并在 C# 中使用适当大小的整数类型。

要意识到的一件重要的事情是,在 C/C++ 中 size_t 通常具有与 intptr_t 相同的位数,但这不能保证,尤其是对于分段架构。

我知道很多人说“使用 UIntPtr ”,这通常会起作用,但不能保证正确。


从 --- 的 size_t /C++ 定义size_t

是 sizeof 运算符结果的无符号整数类型;

原文由 Matthew Watson 发布,翻译遵循 CC BY-SA 3.0 许可协议

C# 中 size_t 的最佳等效项是 UIntPtr 类型。它在 32 位平台上是 32 位的,在 64 位平台上是 64 位的,并且是无符号的。

原文由 Roger Sanders 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题