【问题标题】:C# analog type for ssize_tssize_t 的 C# 模拟类型
【发布时间】:2012-03-26 00:58:46
【问题描述】:

我正在寻找一种 C# 整数数据类型,它可以在 32 位机器上保存 32 位有符号值,在 64 位机器上保存 64 位有符号值。
原因是对接收 ssize_t 参数的 C 函数的 P/Invoke 调用。
我知道我可以使用预处理器指令为不同的机器以不同的方式“DllImport”这个函数(对于 32 位机器使用 ints,对于 64 位机器使用 longs),但这需要我为不同的目标构建和运输,这是非常不可取的。

当然,非常欢迎任何其他解决此问题的方法:D

【问题讨论】:

  • @Marcelo - 我想你在找IntPtr
  • 另一个简单的解决方案是始终向您的 C 代码发送 64 位值。您似乎没有说明无法完成此操作的原因。
  • ssize_t 不是 C 标准的一部分,但带有 POSIX。对于 C,您有 intptr_t 或更好的 uintptr_t,它是一个整数类型,可以保存与指针相同的信息。它不一定存在(如果目标机器上没有这种类型),但通常确实存在。

标签: c# c pinvoke 32bit-64bit


【解决方案1】:

您可以使用IntPtr type:

IntPtr 类型被设计为一个整数,其大小是特定于平台的。也就是说,这种类型的实例在 32 位硬件和操作系统上预计为 32 位,在 64 位硬件和操作系统上预计为 64 位。

【讨论】:

  • 天哪.. 从来没有想过 IntPtr 只是简单地持有一个数字,我的脑海里总是把它看作一个指针,为此我一直认为它是无符号的.. 搞定了!
  • IntPtr 已签名。如果需要无符号类型,可以使用UIntPtr
  • @dtb - 他表示他正在寻找存储有符号整数。根据我所做的一些快速阅读,在处理UIntPtr 时还有一个“陷阱”。
【解决方案2】:

我正在寻找可以保存 32 位有符号的 C# 整数数据类型 32 位机器上的值和 64 位机器上的 64 位有符号值。

您正在寻找IntPtr

【讨论】:

    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多