2011-10-28 1 views
1

Je sais que je peux utiliser bitconverter.GetBytes pour obtenir les octets d'un nombre entier. Cependant, j'ai besoin d'un tableau où le contenu peut être comparé pour l'ordre de tri.Le moyen le plus rapide d'obtenir un tableau d'octets d'ordre de tri à partir de l'entier signé

par exemple.

var plusOne = BitConverter.GetBytes(1); 
yields bytes: 0,0,0,1 

var plusOne = BitConverter.GetBytes(2); 
yields bytes: 0,0,0,2 

So far so good:

mais:

var minusOne = BitConverter.GetBytes(-1); 
yields bytes: 255,255,255,255 

Rien d'étrange ici. Mais la comparaison du tableau d'octets MinusOne avec le bytearray de plusOne dirait que le tableau d'octets MinusOne est supérieure à la plusOne (255> 0)

Est-il possible de fantaisie de changer, XOR etc, de sorte que Int.Min donnerait 0,0,0,0 et int.Max donneraient 255,255,255,255?

Désolé pour la confusion :)

Répondre

2

ajouter simplement int.MaxValue + 1 à la valeur actuelle à un uint casted pour préserver la gamme comme:

var result = BitConverter.GetBytes((uint)((long)input - int.MinValue)); 
+0

je suis venu avec cette solution'unchecked ((uint) (int.MinValue^(1 << 31))) n'a pas besoin de tomber dans un plus gros type de données là-bas .. –

Questions connexes