2009-03-27 13 views
6

Si j'essaie avec BitConverter, il nécessite un tableau d'octets et je n'ai pas cela.J'ai un Int32 et je veux le convertir en UInt32.C#: Comment convertir long en ulong

En C++ il n'y avait aucun problème avec cela.

+0

Un peu confus de ce que vous demandez ici: buddy - longs, tableaux d'octets, et ints - pouvez-vous élaborer? – Chris

Répondre

17

Une distribution simple est tout ce dont vous avez besoin. Comme il est possible de perdre la précision en faisant cela, la conversion est explicite.

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

N'est-ce pas possible de déborder avec de gros négatifs? Vous pouvez utiliser 'unchecked' pour tronquer à la place: http://msdn.microsoft.com/fr-fr/library/a569z7k8(VS.71).aspx –

1

Pour convertir une longue à un ulong, il suffit de jeter:

long a; 
ulong b = (ulong)a; 

C# ne jetterai pas une exception si elle est un nombre négatif.

+0

Je ne crois pas que cela déclenche une exception avec une valeur négative, mais ne sera pas ce que vous attendez ... ne pas avoir .net ici (ordinateur portable), ou le testerait. – Tracker1

+0

Ce ne sera pas le cas, mais le premier bit sera interprété comme le bit le plus significatif au lieu du bit de signe. – DuneCat

+0

Il ne lancera pas. Vous devriez envisager de réviser votre réponse, sinon cela pourrait être trompeur. – KFL

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

EDIT: question ne sait pas si vous avez une longue ou un int?

+0

Je pense que John se réfère à "vieux" longs en C ou C++ qui avaient 32 bits de large. –

+0

question dit C#? –

+0

Je voulais dire qu'il l'a mentionné par habitude. –

1

Compte tenu de cette fonction:

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

Et cet usage:

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

Ce sera le résultat:

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" 

Comme vous pouvez le voir les bits sont conservés complètement, même pour les valeurs négatives.

Questions connexes