什么是 __int32?
Posted
技术标签:
【中文标题】什么是 __int32?【英文标题】:What's __int32? 【发布时间】:2016-07-14 10:10:03 【问题描述】:我一直在努力理解this。这是一个名为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
here 方法,但我不知道应该如何在 C# 代码中定义结构,并且该方法将指向它的指针作为参数。这些__int32
和__int64
是什么?我已经搜索过“双下划线 c”等,但我发现的所有内容都非常不具体。
我可能不得不单独询问 handle_t
参数,所以现在我只想询问有关定义此结构并将其传递给 C# 中的 PInvoked 方法的问题。
【问题讨论】:
这是一个有符号整数数据类型,保证为 32 位长。 msdn.microsoft.com/en-us/library/29dh1w7z.aspx @πάνταῥεῖ 谢谢,所以我应该在 C# 代码中使用Int32
?
Int32 和 Int64 分别是 IntPtr(或 UIntPtr):msdn.microsoft.com/en-us/library/ms235282.aspx
【参考方案1】:
使用google 和第一个链接MSDN 说:
Microsoft C/C++ 功能支持大小整数类型。你可以 使用 __intn 声明 8、16、32 或 64 位整数变量 类型说明符,其中 n 为 8、16、32 或 64。
正如您在MSDN 上看到的那样,c# 等效于System.Int64
【讨论】:
【参考方案2】:摘自 2003 C++ 标准:
每个包含双下划线 (__) 或以下划线后跟大写字母 (2.11) 的名称都保留给实现以供任何使用。
为了简化,__int32
是 32 位编码的 int
和 64 位编码的 __int64
。您消除了标准 int
类型的大小抽象,这样您就可以确定变量将分配 4字节精确
【讨论】:
【参考方案3】:将“unsigned __int32”替换为“Uint32”,对于有符号的__int32,使用“Int32”。 __int64 也是如此。
【讨论】:
【参考方案4】:正如其他人所说,signed __int32
是 32 位 2 的补码整数,unsigned __int32
是 32 位无符号整数。
在int32
之前使用__
形成__int32
使其成为保留 标识符。这样做的一个重要优势是它不会与兼容的预先存在的用户代码冲突。
像下面这样使用会鼓励编译器依赖
unsigned __int32 ulSize;
最好使用以下内容。即使没有为您的编译器提供<stdint.h>
,也存在在线编译器。
#include <stdint.h>
uint32_t ulSize;
【讨论】:
以上是关于什么是 __int32?的主要内容,如果未能解决你的问题,请参考以下文章
int32,int,int32_t,int8和int8_t之间的区别
什么是 uint_fast32_t,为什么要使用它来代替常规的 int 和 uint32_t?
int32、int、int32_t、int8和int8_t的区别
std::unordered_map<int32_t, int32_t> 在堆上声明