2009-03-27 5 views
6

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

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

+0

Несколько путают то, что вы просите здесь, приятель - longs, байтовые массивы и ints - можете ли вы уточнить? – Chris

ответ

17

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

long x = 10; 
ulong y = (ulong)x; 
+7

Разве это невозможно переполнить с большими негативами? Вместо этого вы можете использовать 'unchecked', чтобы усечь: http://msdn.microsoft.com/en-us/library/a569z7k8(VS.71).aspx –

1

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

long a; 
ulong b = (ulong)a; 

C# не будет бросать исключение, если это отрицательное число.

+0

Я не верю, что это порождает исключение с отрицательным значением, но не будет того, что вы ожидаете ... не имеете .net здесь (ноутбук), или проверит его. – Tracker1

+0

Это не будет, но первый бит будет интерпретироваться как самый старший бит вместо знакового бита. – DuneCat

+0

Он не бросит. Вы должны пересмотреть свой ответ, иначе это может ввести в заблуждение. – KFL

1
Int32 i = 17; 
UInt32 j = (UInt32)i; 

EDIT: вопрос остается неясным, есть ли у вас длинный или INT?

+0

Я думаю, что Джон имеет в виду «старые» длинные на C или C++, которые были 32 бита в ширину. –

+0

вопрос говорит C#? –

+0

Я имел в виду, что он говорил об этом по привычке. –

1

Учитывая эту функцию:

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" 

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

 Смежные вопросы

  • Нет связанных вопросов^_^