是否可以将整数编码为字节数组以进行二进制比较

时间:2012-02-02 22:48:00

标签: hadoop integer byte comparator

我想检查是否有一种方法可以将整数编码为可以二进制比较的字节。

示例:假设我有整数-1和1

a)将-1写入字节数组b1 [],将1写入b2 []

b)b1 []应该小于b2 []

如果我们用大端顺序写,我相信它适用于正整数但不适用于负数。

我正在尝试为Hadoop自定义原始密钥比较器执行此操作...

由于

Ajai

1 个答案:

答案 0 :(得分:1)

这是在C#中,但您应该能够以您选择的语言执行类似的操作,它会为正整数和负整数提供正确的排序顺序。 请注意,您需要使用 unsigned 字节类型进行正确排序。

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;
}