什么是__int32?

What's __int32?

本文关键字:int32 什么      更新时间:2023-10-16

我一直在试图理解这一点。它是名为 W32TIME_STATUS_INFO 的结构的参考页面。

 typedef struct {
   unsigned __int32 ulSize;
   unsigned __int32 eLeapIndicator;
   unsigned __int32 nStratum;
   signed __int32 nPollInterval;
   unsigned __int32 refidSource;
   unsigned __int64 qwLastSyncTicks;
   signed __int64 toRootDelay;
   unsigned __int64 tpRootDispersion;
   signed __int32 nClockPrecision;
   [string, unique] wchar_t* wszSource;
   signed __int64 toSysPhaseOffset;
   unsigned __int32 ulLcState;
   unsigned __int32 ulTSFlags;
   unsigned __int32 ulClockRate;
   unsigned __int32 ulNetlogonServiceBits;
   unsigned __int32 eLastSyncResult;
   unsigned __int64 tpTimeLastGoodSync;
   unsigned __int32 cEntries;
   [size_is(cEntries)] PW32TIME_ENTRY pEntries;
 } W32TIME_STATUS_INFO,
  *PW32TIME_STATUS_INFO;
我想在 C# 代码

中使用W32TimeQueryStatus的方法,但我不知道应该如何在 C# 代码中定义结构,并且该方法将指向它的指针作为参数。所有这些__int32__int64的事情是什么?我已经搜索了"双下划线c"等,但我找到的所有内容都非常不具体。

我可能不得不单独询问handle_t参数,所以现在我只想询问定义此结构并将其传递给 C# 中的 PInvoked 方法。

使用谷歌和第一个链接MSDN说:

Microsoft C/C++ 功能支持大小整数类型。您可以 使用 __intn 声明 8 位、16 位、32 位或 64 位整数变量 类型说明符,其中 n 为 8、16、32 或 64。

正如您在MSDN上看到的那样,c#等效项是System.Int64

自2003年C++标准:

每个包含双下划线 (_ _) 或以下划线开头后跟大写字母 (2.11) 的名称都保留给实现以供任何使用。

为简化起见,__int32 是一个编码为 32 位、__int64 为 64 位的int。您消除了标准int类型的大小抽象,这样您就可以确定变量将精确分配 4 个字节

将"无符号__int32"替换为"Uint32",对于有符号__int32使用"Int32"。__int64也是如此。

正如其他人所说signed __int32是一个 32 位 2 的补码整数,unsigned __int32 是一个 32 位无符号整数。

int32之前使用__来形成__int32使其成为保留标识符。 这样做的一个重要优点是它不会与兼容的预先存在的用户代码发生冲突

像下面这样使用鼓励编译器依赖性

unsigned __int32 ulSize;

最好使用以下方法。 即使没有为您的编译器提供<stdint.h>,也存在在线编译器。

#include <stdint.h>
uint32_t ulSize;