簡體   English   中英

連接字符串,轉換為ushort,與ushort比較

[英]Concatenate strings, convert to ushort, compare against ushort

所以我有一些常數:

const ushort _WIN32_WINNT_NT4 = 0x0400;
const ushort _WIN32_WINNT_WIN2K = 0x0500;
....

然后我有一個主要版本號,次要版本號和Service Pack編號,當您將它們串聯在一起時,它與上面的編號相同-除了它們中的2個是int且一個是string 我可以將它們全部放入這樣的字符串中:

string version = majorVersion.ToString() + minorVersion.ToString() + sp;

對於Windows 2000,這看起來像是"500" 它“匹配” ushort,只是沒有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 ,而是返回Unknown OS version 當我調試並懸停在_WIN32_WINNT_WIN2K ,實際上是1280 (十進制格式)。 _WIN32_WINNT_NT4顯示為1024 ,因此"400"將永遠不匹配。

如果我包含“ 0x0”:

ushort uniNum = Convert.ToUInt16("0x0" + version);

它給我一個錯誤,就是輸入格式不正確。

我可能缺少一些簡單的東西,但是在任何有用的地方都找不到。

您已經有了常量,並且它們是十六進制的。 如果您得到400500它們也都是十六進制的,因此請替換:

ushort uniNum = Convert.ToUInt16(version);

有:

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

常量聲明的值是一個十六進制文字表達式:

const ushort _WIN32_WINNT_NT4 = 0x0400;

其中0x0400等於十六進制400 ,十進制1024 所以基本上,您所比較的不是400,而是1024。

如果要與400比較,請將常數更改為400:

const ushort _WIN32_WINNT_NT4 = 400;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM