连接字符串,转换为 ushort,与 ushort 进行比较
Concatenate strings, convert to ushort, compare against ushort
所以我有一些常数:
const ushort _WIN32_WINNT_NT4 = 0x0400;
const ushort _WIN32_WINNT_WIN2K = 0x0500;
....
然后我有一个主要版本号、次要版本号和服务包号,当您将它们连接在一起时,它与上面的数字相同 - 除了其中 2 个是 int
和一个是 string
。我可以将它们全部放入这样的字符串中:
string version = majorVersion.ToString() + minorVersion.ToString() + sp;
对于 Windows 2000,这看起来像 "500"
。它 "matches" 是 ushort,只是没有 0x0
.
我想做的是将 version
交给一个函数,作为 ushort
returns 正确的 OS:
private static string WindowsVersion(ushort uniNum)
{
switch (uniNum)
{
case _WIN32_WINNT_NT4:
return "Windows NT 4.0";
case _WIN32_WINNT_WIN2K:
return "Windows 2000";
....
default:
return "Unknown OS version.";
}
}
问题是,即使我这样做了:
ushort uniNum = Convert.ToUInt16(version);
并说它以 500
形式发送,常量是 0x0500
,所以它永远找不到 OS 和 returns Unknown OS version
,而是.当我调试并将鼠标悬停在 _WIN32_WINNT_WIN2K
上时,它实际上是十进制格式的 1280
。
_WIN32_WINNT_NT4
显示为 1024
,因此 "400"
永远不会匹配它。
如果我包含“0x0”:
ushort uniNum = Convert.ToUInt16("0x0" + version);
提示输入格式不正确。
我可能遗漏了一些简单的东西,但我找不到任何有用的东西。
您的常量声明的值是一个十六进制文字表达式:
const ushort _WIN32_WINNT_NT4 = 0x0400;
其中0x0400
相当于十六进制400
、十进制1024
。所以基本上,您不是与 400 进行比较,而是与 1024 进行比较。
如果您想与 400 进行比较,请将常量更改为 400:
const ushort _WIN32_WINNT_NT4 = 400;
您已经有了常量,它们是十六进制的。如果你得到 400
和 500
它们也是十六进制的,所以替换:
ushort uniNum = Convert.ToUInt16(version);
与:
ushort uniNum = Convert.ToUInt16(version, 16);
所以我有一些常数:
const ushort _WIN32_WINNT_NT4 = 0x0400;
const ushort _WIN32_WINNT_WIN2K = 0x0500;
....
然后我有一个主要版本号、次要版本号和服务包号,当您将它们连接在一起时,它与上面的数字相同 - 除了其中 2 个是 int
和一个是 string
。我可以将它们全部放入这样的字符串中:
string version = majorVersion.ToString() + minorVersion.ToString() + sp;
对于 Windows 2000,这看起来像 "500"
。它 "matches" 是 ushort,只是没有 0x0
.
我想做的是将 version
交给一个函数,作为 ushort
returns 正确的 OS:
private static string WindowsVersion(ushort uniNum)
{
switch (uniNum)
{
case _WIN32_WINNT_NT4:
return "Windows NT 4.0";
case _WIN32_WINNT_WIN2K:
return "Windows 2000";
....
default:
return "Unknown OS version.";
}
}
问题是,即使我这样做了:
ushort uniNum = Convert.ToUInt16(version);
并说它以 500
形式发送,常量是 0x0500
,所以它永远找不到 OS 和 returns Unknown OS version
,而是.当我调试并将鼠标悬停在 _WIN32_WINNT_WIN2K
上时,它实际上是十进制格式的 1280
。
_WIN32_WINNT_NT4
显示为 1024
,因此 "400"
永远不会匹配它。
如果我包含“0x0”:
ushort uniNum = Convert.ToUInt16("0x0" + version);
提示输入格式不正确。
我可能遗漏了一些简单的东西,但我找不到任何有用的东西。
您的常量声明的值是一个十六进制文字表达式:
const ushort _WIN32_WINNT_NT4 = 0x0400;
其中0x0400
相当于十六进制400
、十进制1024
。所以基本上,您不是与 400 进行比较,而是与 1024 进行比较。
如果您想与 400 进行比较,请将常量更改为 400:
const ushort _WIN32_WINNT_NT4 = 400;
您已经有了常量,它们是十六进制的。如果你得到 400
和 500
它们也是十六进制的,所以替换:
ushort uniNum = Convert.ToUInt16(version);
与:
ushort uniNum = Convert.ToUInt16(version, 16);