所以我有一些常量:
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
返回正确的操作系统:
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
,因此它永远不会找到操作系统并返回 Unknown OS version
. 当我调试并将鼠标悬停在 _WIN32_WINNT_WIN2K
上时,它实际上是十进制格式的 1280
. _WIN32_WINNT_NT4
显示为 1024
,因此 "400"
永远不会匹配它 .
如果我包含“0x0”:
ushort uniNum = Convert.ToUInt16("0x0" + version);
它给出了一个错误,输入格式不正确 .
我可能错过了一些简单的东西,但我找不到任何有用的东西 .
2 回答
你已经有了常量,它们是十六进制的 . 如果你得到
400
和500
它们也是十六进制的,那么替换:有:
您的常量声明的值是十六进制文字表达式:
其中
0x0400
等于十六进制400
,十进制1024
. 所以基本上,你不是比较400而是1024 .如果你想与400比较,你的常数变为400: