2009-03-27 13 views
6

Si intento con BitConverter, requiere una matriz de bytes y no la tengo. Tengo un Int32 y quiero convertirlo a UInt32.C#: Cómo convertir long to ulong

En C++ no hubo ningún problema con eso.

+0

Algo confundido lo que estás preguntando aquí compinche - longs, byte arrays, y ints - ¿puedes dar más detalles? – Chris

Respuesta

17

Un elenco simple es todo lo que necesita. Como es posible perder precisión al hacer esto, la conversión es explícita.

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

¿No es posible desbordar con grandes negativos? Puede usar 'unchecked' para truncar en su lugar: http://msdn.microsoft.com/en-us/library/a569z7k8(VS.71).aspx –

1

Convertir mucho a un ulong, simplemente echarlo:

long a; 
ulong b = (ulong)a; 

C# no será una excepción si se trata de un número negativo.

+0

No creo que esto arroje una excepción con un valor negativo, pero no será lo que espera ... no tiene .net aquí (laptop), o lo probaría. – Tracker1

+0

No lo hará, pero el primer bit se interpretará como el bit más significativo en lugar del bit de signo. – DuneCat

+0

No arrojará. Debería considerar revisar su respuesta de lo contrario podría ser engañoso. – KFL

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

EDIT: pregunta es claro si usted tiene un largo o un int?

+0

Creo que John se refiere a longs "viejos" en C o C++ que tenían 32 bits de ancho. –

+0

pregunta dice C#? –

+0

Quise decir que se refirió por costumbre. –

1

Dada esta función:

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

Y este uso:

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

Este será el resultado:

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" 

Como se puede ver los bits se conservan por completo, incluso para valores negativos