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

Я знаю, что могу использовать 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.Max даст 255,255,255,255??

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

1 ответ

Решение

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

var result = BitConverter.GetBytes((uint)((long)input - int.MinValue));
Другие вопросы по тегам