[英]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);
它給我一個錯誤,就是輸入格式不正確。
我可能缺少一些簡單的東西,但是在任何有用的地方都找不到。
您已經有了常量,並且它們是十六進制的。 如果您得到400
和500
它們也都是十六進制的,因此請替換:
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.