C #: как конвертировать длинные в ulong - PullRequest
9 голосов
/ 27 марта 2009

Если я пытаюсь использовать BitConverter, для этого требуется байтовый массив, а у меня его нет. У меня есть Int32, и я хочу преобразовать его в UInt32.

В C ++ с этим не было проблем.

Ответы [ 5 ]

19 голосов
/ 27 марта 2009

Простой бросок - это все, что вам нужно. Поскольку при этом можно потерять точность, преобразование явное.

long x = 10;
ulong y = (ulong)x;
7 голосов
/ 27 марта 2009

Попробуйте:

Convert.ToUInt32()
1 голос
/ 24 декабря 2014

С учетом этой функции:

string test(long vLong)
{
    ulong vULong = (ulong)vLong;
    return string.Format("long hex: {0:X}, ulong hex: {1:X}", vLong, vULong);
}

И это использование:

    string t1 = test(Int64.MinValue);
    string t2 = test(Int64.MinValue + 1L);
    string t3 = test(-1L);
    string t4 = test(-2L);

Это будет результат:

    t1 == "long hex: 8000000000000000, ulong hex: 8000000000000000"
    t2 == "long hex: 8000000000000001, ulong hex: 8000000000000001"
    t3 == "long hex: FFFFFFFFFFFFFFFF, ulong hex: FFFFFFFFFFFFFFFF"
    t4 == "long hex: FFFFFFFFFFFFFFFE, ulong hex: FFFFFFFFFFFFFFFE"

Как видите, биты полностью сохраняются даже для отрицательных значений.

1 голос
/ 27 марта 2009
Int32 i = 17;
UInt32 j = (UInt32)i;

РЕДАКТИРОВАТЬ: вопрос неясно, есть ли у вас long или int?

1 голос
/ 27 марта 2009

Чтобы преобразовать длинное в ульонг, просто разыграйте его:

long a;
ulong b = (ulong)a;

C # НЕ выдает исключение, если оно является отрицательным числом.

...