2012-02-02 11 views
0

バイナリに匹敵するバイトに整数をエンコードする方法があるかどうかを確認したいと考えました。バイナリに匹敵するように整数からバイト配列をエンコードすることは可能ですか?

例:私はB2未満を比較する必要があり、整数-1と[] B1、B2 []

Bに1

A)書く-1 [] B1バイト配列に、書き込み1)を持っていると言います[]

私たちがビッグエンディアンの順序で書いているのであれば、それは正の整数ではなく、負の整数で動作すると信じています。私はHadoopのカスタム生キーコンパレータのためにこれを行うにしようとしています

...

おかげ

Ajai

答えて

1

これは、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; 
} 
+0

ありがとうございます。しかし、これはどのように機能しますか? – Ajai

+0

@Ajai MinIntが0になるように整数をシフトし、MaxIntがMaxUIntになるようにします(つまり、すべての数値は半正負ではなく正であり、ビッグエンディアンをバイト配列にエンコードします)。デコードは逆を行い、ビッグエンディアンからデコードし、数字を戻します。 –

関連する問題