Можно ли закодировать целочисленный байтовый массив для двоичного сопоставления - PullRequest
0 голосов
/ 03 февраля 2012

Я хотел проверить, существует ли способ кодирования целого числа в байты, который был бы двоично сопоставим.

Пример: скажем, у меня есть целые числа -1 и 1

a) Запись -1 в байтовый массив b1 [], запишите 1 в b2 []

b) b1 [] должен сравнивать меньше чем b2 []

Если мы пишем в порядке с прямым порядком байтов, я считаю, чтоположительные целые, но не отрицательные.

Я пытаюсь сделать это для компаратора пользовательских необработанных ключей Hadoop ...

Спасибо

Ajai

1 Ответ

1 голос
/ 03 февраля 2012

Это в C #, но вы должны быть в состоянии сделать что-то похожее на выбранном вами языке, это даст вам правильный порядок сортировки для положительных и отрицательных целых чисел.Обратите внимание, что для правильной сортировки необходимо использовать беззнаковый тип байта.

static byte[] EncodeToBytes(int val)
{
    val -= int.MinValue;
    var result = new byte[4];
    for (int i = 0; i < 4; i++, val <<= 8)
        result[i] = (byte)(val >> 24);
    return result;
}

static int DecodeFromBytes(byte[] val)
{
    var result = 0;
    for (int i = 0; i < 4; i++)
        result = (result << 8) | (val[i] & 0xff);
    return result + int.MinValue;
}
...