有符号整数到无符号整数和 DWORD 转换
本文关键字:DWORD 转换 无符号整数 符号 整数 | 更新日期: 2023-09-27 18:34:28
>我有一个Win32 API调用,它返回一个有符号的32位整数值(-2147022987(。
在Windows计算器(在程序员视图中Alt-3
(模式设置为Dec
,如果我输入-2147022987的值,然后将模式切换到Word
,则Dword
得到1909。 我是否正确理解 1909 年是DWord
中包含的两个Word
之一的代表?此值是低阶Dword
还是高阶Dword
?
如何在 C# 中以编程方式进行此转换,以便将值与下面定义的枚举类型匹配?
public enum LogonError : ushort
{
LogonSuccessful = 0,
PasswordMustChange = 1907,
NoSuchUser = 1317,
LogonFailure = 1326,
AccountRestriction = 1327,
AccountDisabled = 1331,
InvalidLogonHours = 1328,
NoLogonServers = 1311,
InvalidWorkstation = 1329,
AccountLockedOut = 1909,
AccountExpired = 1793,
PasswordExpired = 1330
}
您可以使用&
(按位 AND(运算符,如下所示:
int i = -2147022987;
LogonError err = (LogonError)(i & 0xffff); // 1909
假设您像这样声明外部 API 调用:
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
您可以使用此函数获取错误代码:
int errorCode = Marshal.GetLastWin32Error();
您可能需要将枚举更改为 int
,这仅在使用SetLastError = true
时有效