Объединить строки, преобразовать в 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;
Другие вопросы по тегам