我想检查是否有一种方法可以将整数编码为可以二进制比较的字节。
示例:假设我有整数-1和1
a)将-1写入字节数组b1 [],将1写入b2 []
b)b1 []应该小于b2 []
如果我们用大端顺序写,我相信它适用于正整数但不适用于负数。
我正在尝试为Hadoop自定义原始密钥比较器执行此操作...
由于
Ajai
答案 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;
}