Самый быстрый способ получить байтовый массив порядка сортировки из целого числа со знаком - PullRequest
1 голос
/ 28 октября 2011

Я знаю, что могу использовать bitconverter.GetBytes, чтобы получить байты из целого числа.Однако мне нужен массив, в котором содержимое можно сравнивать по порядку сортировки.

например,

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

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

Пока все хорошо:

, но:

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

Ничего странного здесь нет.Но сравнение байтового массива minusOne с байтовым массивом plusOne говорит о том, что байтовый массив minusOne больше, чем plusOne (255> 0)

Есть ли какой-нибудь причудливый способ сдвига, xor и т. Д., Чтобы Int.Minдать 0,0,0,0 и int. Макс даст 255,255,255,255 ??

Извините за путаницу:)

1 Ответ

2 голосов
/ 28 октября 2011

Просто добавьте int.MaxValue + 1 к текущему значению, приведенному к uint, чтобы сохранить диапазон как:

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