Объединить строки, преобразовать в ushort, сравнить с ushort
Итак, у меня есть несколько констант:
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"
, Это "соответствует" 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 ответа
У вас уже есть константы, и они шестнадцатеричные. Если вы получаете 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;