首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串连字符串,转换为ushort,与ushort进行比较

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

Stack Overflow用户
提问于 2017-10-19 01:00:53
回答 2查看 432关注 0票数 0

所以我有一些常数:

代码语言:javascript
复制
const ushort _WIN32_WINNT_NT4 = 0x0400;
const ushort _WIN32_WINNT_WIN2K = 0x0500;
....

然后我有一个主版本号、次要版本号和服务包号,当你把它们连在一起时,它和上面的数字是一样的--除了两个是int,一个是string。我可以把他们都绑成这样的绳子:

代码语言:javascript
复制
string version = majorVersion.ToString() + minorVersion.ToString() + sp;

对于Windows2000,这看起来像"500"。它“匹配”篡位者,只是没有0x0

我想要做的是将version交给一个函数,作为返回正确OS的ushort

代码语言:javascript
复制
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.";
    }
 }

问题是,即使我做到了:

代码语言:javascript
复制
ushort uniNum = Convert.ToUInt16(version);

如果它以500的形式发送它,常量是0x0500,所以它永远不会找到操作系统并返回Unknown OS version。当我在_WIN32_WINNT_WIN2K上调试和悬停时,它实际上是十进制格式的1280_WIN32_WINNT_NT4显示为1024,所以"400"永远不会匹配它。

如果我包括"0x0":

代码语言:javascript
复制
ushort uniNum = Convert.ToUInt16("0x0" + version);

它给了我一个错误的输入是不正确的格式。

我可能错过了一些简单的东西,但我在任何地方都找不到有用的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-19 01:42:16

您已经有了常量,它们是十六进制的。如果您得到的是400500,它们也是十六进制,所以请替换:

代码语言:javascript
复制
ushort uniNum = Convert.ToUInt16(version);

通过以下方式:

代码语言:javascript
复制
ushort uniNum = Convert.ToUInt16(version, 16);
票数 1
EN

Stack Overflow用户

发布于 2017-10-19 01:06:53

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

代码语言:javascript
复制
const ushort _WIN32_WINNT_NT4 = 0x0400;

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

如果要与400进行比较,则将常量更改为400:

代码语言:javascript
复制
const ushort _WIN32_WINNT_NT4 = 400;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46821400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档