Самый быстрый способ получить байтовый массив порядка сортировки из целого числа со знаком
Я знаю, что могу использовать 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));