首页 文章

连接字符串,转换为ushort,与ushort进行比较

提问于
浏览
0

所以我有一些常量:

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 回答

  • 1

    你已经有了常量,它们是十六进制的 . 如果你得到 400500 它们也是十六进制的,那么替换:

    ushort uniNum = Convert.ToUInt16(version);
    

    有:

    ushort uniNum = Convert.ToUInt16(version, 16);
    
  • 0

    您的常量声明的值是十六进制文字表达式:

    const ushort _WIN32_WINNT_NT4 = 0x0400;
    

    其中 0x0400 等于十六进制 400 ,十进制 1024 . 所以基本上,你不是比较400而是1024 .

    如果你想与400比较,你的常数变为400:

    const ushort _WIN32_WINNT_NT4 = 400;
    

相关问题