所以我有一些常数:
const ushort _WIN32_WINNT_NT4 = 0x0400;
const ushort _WIN32_WINNT_WIN2K = 0x0500;
....然后我有一个主版本号、次要版本号和服务包号,当你把它们连在一起时,它和上面的数字是一样的--除了两个是int,一个是string。我可以把他们都绑成这样的绳子:
string version = majorVersion.ToString() + minorVersion.ToString() + sp;对于Windows2000,这看起来像"500"。它“匹配”篡位者,只是没有0x0。
我想要做的是将version交给一个函数,作为返回正确OS的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);它给了我一个错误的输入是不正确的格式。
我可能错过了一些简单的东西,但我在任何地方都找不到有用的东西。
发布于 2017-10-19 01:42:16
您已经有了常量,它们是十六进制的。如果您得到的是400和500,它们也是十六进制,所以请替换:
ushort uniNum = Convert.ToUInt16(version);通过以下方式:
ushort uniNum = Convert.ToUInt16(version, 16);发布于 2017-10-19 01:06:53
常量声明的值是十六进制的文字表达式:
const ushort _WIN32_WINNT_NT4 = 0x0400;其中0x0400等价于十六进制400,十进制1024。基本上,你不是比较400,而是1024。
如果要与400进行比较,则将常量更改为400:
const ushort _WIN32_WINNT_NT4 = 400;https://stackoverflow.com/questions/46821400
复制相似问题